<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Alex's Blog &#187; 笔记</title>
	<atom:link href="http://www.hialex.net/tags/%e7%ac%94%e8%ae%b0/feed" rel="self" type="application/rss+xml" />
	<link>http://www.hialex.net</link>
	<description>记录生活与工作中的点点滴滴</description>
	<lastBuildDate>Sat, 09 Jan 2010 12:37:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MySQL读书笔记(3)</title>
		<link>http://www.hialex.net/2009/03/mysql-notes-3.html</link>
		<comments>http://www.hialex.net/2009/03/mysql-notes-3.html#comments</comments>
		<pubDate>Sun, 08 Mar 2009 14:31:32 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[dml]]></category>
		<category><![CDATA[笔记]]></category>

		<guid isPermaLink="false">http://www.hialex.net/2009/03/mysql-notes-3.html</guid>
		<description><![CDATA[因为这几天有其他事情,一直没继续学习,真是罪过.
今天主要复习了下DML语句。
DML操作是针对数据库中表记录的操作，主要包括记录的插入(insert)、更新(update)、删除(delete)和查询(select)。
1.插入记录(insert)

insert into tablename (filed1,&#8230;,fieldn) values (value1,&#8230;,valuen)
e.g: insert into emp (ename,hiredate,sal,deptno) values (&#8216;hialex&#8217;,'2000-01-01&#8242;,&#8217;2000&#8242;,1);
也可以不指定字段，但是values后面的顺序应该和字段的排列顺序一致。
e.g: insert into emp values (&#8216;lisa&#8217;,'2003-02-01&#8242;,&#8217;3000&#8242;,2);
在列表中没有写的字段，是可空字段的设置为NULL，非空有默认值的设置为默认值，自增字段设置为自增的下一个数字
在MySQL中可以一次插入多条记录：
e.g: insert into dept values(5,&#8217;dept5&#8242;),(6,&#8217;dept6&#8242;);

2.更新字段(update)

update tablename set field1=value1,&#8230;,fieldn=valuen [where condition];
e.g: update emp set sal=4000 where ename=&#8217;lisa&#8217;;
在MySQL中，update命令可同时更新多个表中数据
e.g: update t1,t2,&#8230;,tn set t1.field1=exper1,&#8230;,tn.fieldn=expern [where condition];
注：多表更新的语法更多的用在根据一个表的字段来动态更新另一个表的字段

3.删除字段(delete)

delete from tablename [where condition]
e.g: delete from emp where ename=&#8217;dony&#8217;;
在MySQL中可以一次删除多个表的数据
delete t1,t2,&#8230;,tn from t1,t2,&#8230;,tn;
如果from后面的表名用别名，则delete后面也要用相应的别名
注：不论是单表还是多表，不加where条件就会把表的所有记录删除

 4.查询记录(select)

查询全部记录
select * from tablename;
查询不重复记录
e.g: select distinct [...]]]></description>
			<content:encoded><![CDATA[<p>因为这几天有其他事情,一直没继续学习,真是罪过.</p>
<p>今天主要复习了下DML语句。</p>
<p>DML操作是针对数据库中表记录的操作，主要包括记录的插入(insert)、更新(update)、删除(delete)和查询(select)。</p>
<p>1.插入记录(insert)</p>
<ul>
<li>insert into tablename (filed1,&#8230;,fieldn) values (value1,&#8230;,valuen)<br />
e.g: insert into emp (ename,hiredate,sal,deptno) values (&#8216;hialex&#8217;,'2000-01-01&#8242;,&#8217;2000&#8242;,1);</li>
<li>也可以不指定字段，但是values后面的顺序应该和字段的排列顺序一致。<br />
e.g: insert into emp values (&#8216;lisa&#8217;,'2003-02-01&#8242;,&#8217;3000&#8242;,2);</li>
<li>在列表中没有写的字段，是可空字段的设置为NULL，非空有默认值的设置为默认值，自增字段设置为自增的下一个数字</li>
<li>在MySQL中可以一次插入多条记录：<br />
e.g: insert into dept values(5,&#8217;dept5&#8242;),(6,&#8217;dept6&#8242;);</li>
</ul>
<p>2.更新字段(update)</p>
<ul>
<li>update tablename set field1=value1,&#8230;,fieldn=valuen [where condition];<br />
e.g: update emp set sal=4000 where ename=&#8217;lisa&#8217;;</li>
<li>在MySQL中，update命令可同时更新多个表中数据<br />
e.g: update t1,t2,&#8230;,tn set t1.field1=exper1,&#8230;,tn.fieldn=expern [where condition];</li>
<li>注：多表更新的语法更多的用在根据一个表的字段来动态更新另一个表的字段</li>
</ul>
<p>3.删除字段(delete)</p>
<ul>
<li>delete from tablename [where condition]<br />
e.g: delete from emp where ename=&#8217;dony&#8217;;</li>
<li>在MySQL中可以一次删除多个表的数据<br />
delete t1,t2,&#8230;,tn from t1,t2,&#8230;,tn;</li>
<li>如果from后面的表名用别名，则delete后面也要用相应的别名</li>
<li>注：不论是单表还是多表，不加where条件就会把表的所有记录删除</li>
</ul>
<p> <span id="more-12"></span>4.查询记录(select)</p>
<ul>
<li>查询全部记录<br />
select * from tablename;</li>
<li>查询不重复记录<br />
e.g: select distinct deptno from emp;</li>
<li>条件查询<br />
e.g: select * from emp where deptno=1;</li>
<li>排序和限制
<ul>
<li>select * from tablename [where condition] [order by field1 | [DESC|ASC],&#8230;,fieldn| [DESC|ASC]];</li>
<li>不写[DESC|ASC]则默认是升序排列。</li>
<li>对于排序后的结果，若只希望显示一部分，则可以使用limit关键字实现：
<ul>
<li>select &#8230; [limit offset_start,row_count]</li>
<li>其中offset_start表示记录起始偏移地址(默认为0)，row_count表示显示的行数</li>
<li>e.g: 显示emp表中按照sal排序后的前三条记录<br />
       select * from emp order by sal limit 3</li>
</ul>
</li>
<li>注：limit属于MySQL扩展SQL92后的语法，在其他数据库不能通用</li>
</ul>
</li>
</ul>
<p>5.聚合</p>
<ul>
<li>select [field1,...,fieldn] funname<br />
from tablename<br />
[where where_condititon]<br />
[group by field1,...,fieldn<br />
[with rollup]]<br />
[having where_condition]</li>
<li>注：
<ul>
<li>funname表示要做的聚合操作，也就是聚合函数，常见的有sum、count、max、min等</li>
<li>with rollup 是可选语法，表明是否对分类聚合后的结果进行再汇总</li>
<li>having是对聚合后的结果再进行条件的过滤</li>
<li>where是在聚合前就对记录进行过滤</li>
</ul>
</li>
</ul>
<p>6.表连接</p>
<ul>
<li>表连接分类内连接和外连接，他们之间的主要分别是内连接仅选出两张表中互相匹配的记录，而外连接会选出其他不匹配的记录，常用内连接。</li>
<li>外连接分为左连接和右连接
<ul>
<li>左连接：包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录<br />
select ename,deptname from emp left join dept on emp.deptno=dept.deptno;</li>
<li>右连接：包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录<br />
select ename,deptname from dept right join emp on emp.deptno=dept.deptno;</li>
</ul>
</li>
</ul>
<p>7.子查询</p>
<ul>
<li>用于子查询的关键字主要包括in、not in、=、！=、exists、not exists等</li>
<li>在某些情况下，子查询可以转化为表连接</li>
<li>注：MySQL4.1之前的版本不支持子查询，需要用表连接来实现子查询功能。表连接在很多情况下用于优化子查询。</li>
</ul>
<p>8.记录联合</p>
<ul>
<li>select * from t1<br />
union | union all<br />
select * from t2<br />
&#8230;&#8230;<br />
union | union all<br />
select * from tn;</li>
<li>union和union all的主要区别:
<ul>
<li>union all是把结果集直接合并在一起</li>
<li>union是将union all后的结果进行一直distinct,去除重复记录后的结果。</li>
</ul>
</li>
</ul>
<p>因为DCL的关键字不多，所有就简略的看了下：</p>
<ul>
<li>创建一个用户z1,密码为123具有对test数据库中左右的表有SELECT/INSERT权限:<br />
e.g: grant select,insert on test.* to ‘z1′@’localhost’ identified by ‘123′;</li>
<li>将z1权限变更,收回INSERT权限<br />
e.g: :revoke insert on test.* from ‘z1′@’localhost’;</li>
</ul>
<p><a href="http://17fav.com/?url=http%3A%2F%2Fwww.hialex.net%2F2009%2F03%2Fmysql-notes-3.html&title=MySQL%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0%283%29" title="用 17fav 收藏和分享本文"><img src="http://17fav.com/i/bookmark.gif" alt="17fav 收藏本文" /></a></p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>2009-03-03 -- <a href="http://www.hialex.net/2009/03/mysql-notes-2.html" title="MySQL读书笔记(2)">MySQL读书笔记(2)</a> (0)</li><li>2009-03-02 -- <a href="http://www.hialex.net/2009/03/mysql-notes-1.html" title="MySQL读书笔记(1)">MySQL读书笔记(1)</a> (0)</li><li>2008-04-21 -- <a href="http://www.hialex.net/2008/04/log4j-note-b.html" title="Log4j学习笔记(B)">Log4j学习笔记(B)</a> (0)</li><li>2008-04-20 -- <a href="http://www.hialex.net/2008/04/log4j-note-a.html" title="Log4j学习笔记(A)">Log4j学习笔记(A)</a> (0)</li><li>2008-02-19 -- <a href="http://www.hialex.net/2008/02/jdbc-link-to-mysql.html" title="JDBC连接Mysql数据库">JDBC连接Mysql数据库</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.hialex.net/2009/03/mysql-notes-3.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL读书笔记(2)</title>
		<link>http://www.hialex.net/2009/03/mysql-notes-2.html</link>
		<comments>http://www.hialex.net/2009/03/mysql-notes-2.html#comments</comments>
		<pubDate>Tue, 03 Mar 2009 14:29:51 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[ddl]]></category>
		<category><![CDATA[笔记]]></category>

		<guid isPermaLink="false">http://www.hialex.net/2009/02/the-last-semester-is-boring.html</guid>
		<description><![CDATA[这本书的第一章介绍了Mysql的下载、安装，由于我只有Windows环境，所以就一路Next的安装配置完成，并没有什么好说的。
第二章介绍了(My)SQL基础，主要讲了一些SQL语法和Mysql在SQL标准上的某些关键字扩展。
昨天主要学习了DDL语句：

创建数据库

create database dbname;


显示所有数据库

show databases;


删除数据库

drop database dbname;


选择数据库

use dbname;


显示所有表

show tables;


创建表

create table tablename ( col_name_1 col_type_1 constraints , col_name_2 colu_type_2 constraints,&#8230;&#8230;,col_name_n col_type_n constraints)


查看表定义

desc tablename;


查看更详细的表定义（查看创建表的SQL语句）

show create table tablename (\G);
\G:使得记录能够按照字段竖着排列，对于内容比较长的记录更容易显示


删除表

drop table tablename;


修改表

修改表类型

alter table tablename modify [column] col_definition [first&#124;after col_name]
e.g: alter table emp modify ename varchar(20);


增加表字段

alter table tablename add [column] col_definition [first&#124;after col_name]
e.g: alter table emp add [column] age int(3);


删除表字段

alter table [...]]]></description>
			<content:encoded><![CDATA[<p>这本书的第一章介绍了Mysql的下载、安装，由于我只有Windows环境，所以就一路Next的安装配置完成，并没有什么好说的。</p>
<p>第二章介绍了(My)SQL基础，主要讲了一些SQL语法和Mysql在SQL标准上的某些关键字扩展。</p>
<p>昨天主要学习了DDL语句：</p>
<ul>
<li>创建数据库
<ul>
<li>create database dbname;</li>
</ul>
</li>
<li>显示所有数据库
<ul>
<li>show databases;</li>
</ul>
</li>
<li>删除数据库
<ul>
<li>drop database dbname;</li>
</ul>
</li>
<li>选择数据库
<ul>
<li>use dbname;</li>
</ul>
</li>
<li>显示所有表
<ul>
<li>show tables;</li>
</ul>
</li>
<li>创建表
<ul>
<li>create table tablename ( col_name_1 col_type_1 constraints , col_name_2 colu_type_2 constraints,&#8230;&#8230;,col_name_n col_type_n constraints)</li>
</ul>
</li>
<li>查看表定义
<ul>
<li>desc tablename;</li>
</ul>
</li>
<li>查看更详细的表定义（查看创建表的SQL语句）
<ul>
<li>show create table tablename (\G);</li>
<li>\G:使得记录能够按照字段竖着排列，对于内容比较长的记录更容易显示</li>
</ul>
</li>
<li>删除表
<ul>
<li>drop table tablename;</li>
</ul>
</li>
<li>修改表
<ul>
<li>修改表类型
<ul>
<li>alter table tablename modify [column] col_definition [first|after col_name]</li>
<li>e.g: alter table emp modify ename varchar(20);</li>
</ul>
</li>
<li>增加表字段
<ul>
<li>alter table tablename add [column] col_definition [first|after col_name]</li>
<li>e.g: alter table emp add [column] age int(3);</li>
</ul>
</li>
<li>删除表字段
<ul>
<li>alter table tablename drop [column] col_definition [first|after col_name]</li>
<li>e.g: alter table emp drop [column] age;</li>
</ul>
</li>
<li>注意：change和modify都可以修改表定义，不同的是change后面需要写两次列名，不方便，但是change的有点是可以修改列名称，modify则不能。</li>
<li>字段改名
<ul>
<li>alter table tablename change[column] old_col_name col_definition [first|after col_name]</li>
<li>e.g: alter table emp change age age1 int(4);</li>
</ul>
</li>
<li>修改字段排列顺序
<ul>
<li>在add/change/modify定义中都有first|after col_name，这个选项用于修改字段在表中的位置，默认add增加的新字段是加在表的最后位置，而change/modify默认不会改变字段位置</li>
<li>e.g1: alter table emp add birth date after ename;</li>
<li>e.g2: alter table emp modify age int(3) first;   age字段将置于最前面</li>
</ul>
</li>
<li>更改表名
<ul>
<li>alter table tablename rename [to] new_table_name</li>
<li>e.g: alter table emp rename emp1;</li>
</ul>
</li>
<li>注意：chage/first|after column 这些关键字属于Mysql在标准SQL上的扩展，在其他数据库上不一定适用。</li>
</ul>
</li>
</ul>
<p><a href="http://17fav.com/?url=http%3A%2F%2Fwww.hialex.net%2F2009%2F03%2Fmysql-notes-2.html&title=MySQL%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0%282%29" title="用 17fav 收藏和分享本文"><img src="http://17fav.com/i/bookmark.gif" alt="17fav 收藏本文" /></a></p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>2009-03-08 -- <a href="http://www.hialex.net/2009/03/mysql-notes-3.html" title="MySQL读书笔记(3)">MySQL读书笔记(3)</a> (0)</li><li>2009-03-02 -- <a href="http://www.hialex.net/2009/03/mysql-notes-1.html" title="MySQL读书笔记(1)">MySQL读书笔记(1)</a> (0)</li><li>2008-04-21 -- <a href="http://www.hialex.net/2008/04/log4j-note-b.html" title="Log4j学习笔记(B)">Log4j学习笔记(B)</a> (0)</li><li>2008-04-20 -- <a href="http://www.hialex.net/2008/04/log4j-note-a.html" title="Log4j学习笔记(A)">Log4j学习笔记(A)</a> (0)</li><li>2008-02-19 -- <a href="http://www.hialex.net/2008/02/jdbc-link-to-mysql.html" title="JDBC连接Mysql数据库">JDBC连接Mysql数据库</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.hialex.net/2009/03/mysql-notes-2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL读书笔记(1)</title>
		<link>http://www.hialex.net/2009/03/mysql-notes-1.html</link>
		<comments>http://www.hialex.net/2009/03/mysql-notes-1.html#comments</comments>
		<pubDate>Mon, 02 Mar 2009 14:20:51 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[MSSQL]]></category>
		<category><![CDATA[笔记]]></category>
		<category><![CDATA[网易]]></category>

		<guid isPermaLink="false">http://www.hialex.net/2009/03/mysql-notes-1.html</guid>
		<description><![CDATA[大三下学期我们开了数据库这门课，作为一个非计算机专业，数据库这么专业基础课在老师看来就是不是太重要了，上课也就这么讲讲，简单涉及一下，课时也较计算机专业少了不少，我当时是还算认真的学习了这么课，考试也还凑合，但是作为志在从事软件行业的我来讲，越发感觉数据库是很重要的，而我那点掌握是远远不够的，由于后来时间也比较少，一直忙于其他的事情，想深入学习数据库的愿望一直落空，现在时间多了，我打算在我的毕业设计中也要设计数据库存储方面，所以现在正好好好系统的学习一下。
上课的时候选择的DBMS是MSSQL，我想很多学校都是这样吧！但是这次学习我想学习MySQL，至于MySQL的优点我就不说了，也算赶次时髦吧！
我采用的教材是由网易DBA组编写的《深入浅出MySQL&#8211;数据库开发、优化与管理维护》，我对网易这个网站，这家公司印象都挺好。网上有人评价这本书并不是太好，呵呵，但是我感觉对我来说够了，再说，这是图书馆借的，没花钱，不好再换！哈哈~
认真学习Mysql，认真做好笔记，认真实践，早日掌握Mysql！
Related Posts2009-03-08 -- MySQL读书笔记(3) (0)2009-03-03 -- MySQL读书笔记(2) (0)2008-04-21 -- Log4j学习笔记(B) (0)2008-04-20 -- Log4j学习笔记(A) (0)2008-02-19 -- JDBC连接Mysql数据库 (0)]]></description>
			<content:encoded><![CDATA[<p>大三下学期我们开了数据库这门课，作为一个非计算机专业，数据库这么专业基础课在老<a href="http://www.hialex.net/images/post/Mysql_C7D3/zcover.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" src="http://www.hialex.net/images/post/Mysql_C7D3/zcover_thumb.jpg" border="0" alt="zcover" width="142" height="200" align="right" /></a>师看来就是不是太重要了，上课也就这么讲讲，简单涉及一下，课时也较计算机专业少了不少，我当时是还算认真的学习了这么课，考试也还凑合，但是作为志在从事软件行业的我来讲，越发感觉数据库是很重要的，而我那点掌握是远远不够的，由于后来时间也比较少，一直忙于其他的事情，想深入学习数据库的愿望一直落空，现在时间多了，我打算在我的毕业设计中也要设计数据库存储方面，所以现在正好好好系统的学习一下。</p>
<p>上课的时候选择的DBMS是MSSQL，我想很多学校都是这样吧！但是这次学习我想学习MySQL，至于MySQL的优点我就不说了，也算赶次时髦吧！</p>
<p>我采用的教材是由网易DBA组编写的《深入浅出MySQL&#8211;数据库开发、优化与管理维护》，我对网易这个网站，这家公司印象都挺好。网上有人评价这本书并不是太好，呵呵，但是我感觉对我来说够了，再说，这是图书馆借的，没花钱，不好再换！哈哈~</p>
<p>认真学习Mysql，认真做好笔记，认真实践，早日掌握Mysql！</p>
<p><a href="http://17fav.com/?url=http%3A%2F%2Fwww.hialex.net%2F2009%2F03%2Fmysql-notes-1.html&title=MySQL%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0%281%29" title="用 17fav 收藏和分享本文"><img src="http://17fav.com/i/bookmark.gif" alt="17fav 收藏本文" /></a></p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>2009-03-08 -- <a href="http://www.hialex.net/2009/03/mysql-notes-3.html" title="MySQL读书笔记(3)">MySQL读书笔记(3)</a> (0)</li><li>2009-03-03 -- <a href="http://www.hialex.net/2009/03/mysql-notes-2.html" title="MySQL读书笔记(2)">MySQL读书笔记(2)</a> (0)</li><li>2008-04-21 -- <a href="http://www.hialex.net/2008/04/log4j-note-b.html" title="Log4j学习笔记(B)">Log4j学习笔记(B)</a> (0)</li><li>2008-04-20 -- <a href="http://www.hialex.net/2008/04/log4j-note-a.html" title="Log4j学习笔记(A)">Log4j学习笔记(A)</a> (0)</li><li>2008-02-19 -- <a href="http://www.hialex.net/2008/02/jdbc-link-to-mysql.html" title="JDBC连接Mysql数据库">JDBC连接Mysql数据库</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.hialex.net/2009/03/mysql-notes-1.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Log4j学习笔记(B)</title>
		<link>http://www.hialex.net/2008/04/log4j-note-b.html</link>
		<comments>http://www.hialex.net/2008/04/log4j-note-b.html#comments</comments>
		<pubDate>Mon, 21 Apr 2008 08:13:38 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[appender]]></category>
		<category><![CDATA[log4j]]></category>
		<category><![CDATA[笔记]]></category>

		<guid isPermaLink="false">http://www.hialex.net/2008/04/log4j-note-b.html</guid>
		<description><![CDATA[三、Appender组件 

Appender组件决定将日志信息输出到什么地方。支持以下目的地：

控制台(Console); 
文件(File); 
GUI组件(GUI component); 
套接口服务器(Remote socket server); 
NT的事件记录器(NT Event Logger); 
UNIX Syslog守护进程(Remote UNIX Syslog daemon);


一个Logger可同时对应多个Appender，示例：myLogger配置二个Appender: 一个file, 一个是console：

log4j.logger.myAppender=WARN,file,console 
log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=log.txt 
log4j.apender.console=org.apache.log4j.ConsoleAppender



四、Layout组件 

Layout组件决定日志输出格式，有以下几种类型：

org.apache.log4j.HTMLLayout(以HTML表格形式布局); 
org.apache.log4j.PatternLayout(可以灵活地指定布局模式); 
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串); 
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程和类别等信息);


为名称为console的Appender配置SimpleLayout，代码如下：

log4j.appender.console.layout=org.apache.log4j.SimpleLayout


输出日志格式如下：

WARN &#8211; This is a log message from the myLogger


为名称为file的Appender配置PatternLayout，代码如下：

log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%t %p &#8211; %m%n


输出日志格式如下：

THREAD-1 WARN &#8211; This is a log message from the myLogger


PatternLayout让开发者依照ConversionPattern定义输出格式。ConversionPattern中一些指定日志内容和格式的预定义符号说明如下：



符号
描述


%r 
自程序开始后消耗的毫秒数


%t
表示日志记录请求生成的线程


%p
表示日专语句的优先级


%r
与日志请求相关的类别名称


%c 
日志信息所在的类名


%m%n
表示日志信息的内容





五、Log4J的基本用法 

定义配置文件

Log4J支持二种配置文件格式：XML和Java属性文件(采用&#8220;键=值&#8221;形式)。以下为Java属性文件格式配置文件 
配置Logger组件

配置root Logger语法为：log4j.rootLogger=[priority],appenderName,appenderName,&#8230; 
配置自定义Logger组件语法为：log4j.logger.loggerName=[priority],appenderName,appenderName,&#8230; 
其中：priority为日志级别，可选值包括FATAL、ERROR、WARN、INFO、DEBUG、ALL； [...]]]></description>
			<content:encoded><![CDATA[<p>三、Appender组件 </p>
<ul>
<li>Appender组件决定将日志信息输出到什么地方。支持以下目的地：
<ul>
<li>控制台(Console); </li>
<li>文件(File); </li>
<li>GUI组件(GUI component); </li>
<li>套接口服务器(Remote socket server); </li>
<li>NT的事件记录器(NT Event Logger); </li>
<li>UNIX Syslog守护进程(Remote UNIX Syslog daemon);</li>
</ul>
</li>
<li>一个Logger可同时对应多个Appender，示例：myLogger配置二个Appender: 一个file, 一个是console：
<ul>
<li>log4j.logger.myAppender=WARN,file,console </li>
<li>log4j.appender.file=org.apache.log4j.RollingFileAppender </li>
<li>log4j.appender.file.File=log.txt </li>
<li>log4j.apender.console=org.apache.log4j.ConsoleAppender</li>
</ul>
</li>
</ul>
<p>四、Layout组件 </p>
<ul>
<li>Layout组件决定日志输出格式，有以下几种类型：
<ul>
<li>org.apache.log4j.HTMLLayout(以HTML表格形式布局); </li>
<li>org.apache.log4j.PatternLayout(可以灵活地指定布局模式); </li>
<li>org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串); </li>
<li>org.apache.log4j.TTCCLayout(包含日志产生的时间、线程和类别等信息);</li>
</ul>
</li>
<li>为名称为console的Appender配置SimpleLayout，代码如下：
<ul>
<li>log4j.appender.console.layout=org.apache.log4j.SimpleLayout</li>
</ul>
</li>
<li>输出日志格式如下：
<ul>
<li>WARN &#8211; This is a log message from the myLogger</li>
</ul>
</li>
<li>为名称为file的Appender配置PatternLayout，代码如下：
<ul>
<li>log4j.appender.file.layout=org.apache.log4j.PatternLayout </li>
<li>log4j.appender.file.layout.ConversionPattern=%t %p &#8211; %m%n</li>
</ul>
</li>
<li>输出日志格式如下：
<ul>
<li>THREAD-1 WARN &#8211; This is a log message from the myLogger</li>
</ul>
</li>
<li>PatternLayout让开发者依照ConversionPattern定义输出格式。ConversionPattern中一些指定日志内容和格式的预定义符号说明如下：<br />
<table cellspacing="0" cellpadding="2" width="356" border="1">
<tbody>
<tr>
<td valign="top" width="106">符号</td>
<td valign="top" width="248">描述</td>
</tr>
<tr>
<td valign="top" width="109">%r </td>
<td valign="top" width="248">自程序开始后消耗的毫秒数</td>
</tr>
<tr>
<td valign="top" width="111">%t</td>
<td valign="top" width="248">表示日志记录请求生成的线程</td>
</tr>
<tr>
<td valign="top" width="112">%p</td>
<td valign="top" width="248">表示日专语句的优先级</td>
</tr>
<tr>
<td valign="top" width="113">%r</td>
<td valign="top" width="248">与日志请求相关的类别名称</td>
</tr>
<tr>
<td valign="top" width="114">%c </td>
<td valign="top" width="248">日志信息所在的类名</td>
</tr>
<tr>
<td valign="top" width="114">%m%n</td>
<td valign="top" width="248">表示日志信息的内容</td>
</tr>
</tbody>
</table>
</li>
</ul>
<p>五、Log4J的基本用法 </p>
<ol>
<li>定义配置文件
<ul>
<li>Log4J支持二种配置文件格式：XML和Java属性文件(采用&#8220;键=值&#8221;形式)。以下为Java属性文件格式配置文件 </li>
<li>配置Logger组件
<ul>
<li>配置root Logger语法为：log4j.rootLogger=[priority],appenderName,appenderName,&#8230; </li>
<li>配置自定义Logger组件语法为：log4j.logger.loggerName=[priority],appenderName,appenderName,&#8230; </li>
<li>其中：priority为日志级别，可选值包括FATAL、ERROR、WARN、INFO、DEBUG、ALL； </li>
<li>appenderName指定Appender组件，可指定多个;</li>
</ul>
</li>
</ul>
<ol>
<li>配置Appender组件
<ul>
<li>配置日志信息输出目的地Appender, 语法为： log4j.appender.appenderName=fully.ualified.name.of.appender.class </li>
<li>log4j.appender.appenderName.option1=value1
<ul>
<p>&#8230; </p>
<p>log4j.appender.appenderName.optionN=valueN </p>
</p>
</ul>
</li>
<li>Log4J提供的Appender有以下几种：
<ul>
<li>org.apache.log4j.ConsoleAppender(控制台); </li>
<li>org.apache.log4j.FileAppender(文件); </li>
<li>org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件); </li>
<li>org.apache.log4j.RollingFileAppender(文件大小到指定尺寸产生一个新的文件); </li>
<li>org.apache.log4j.WriteAppender(将日志信息以流格式发送到任意指定地方);</li>
</ul>
</li>
</ul>
</li>
<li>配置Layout组件
<ul>
<li>配置Layout组件语法为： </li>
<li>log4j.appender.appenderName.layout=fully.ualified.name.of.appender.class </li>
<li>log4j.appender.appenderName.layout.option1=value1
<p>&#8230; </p>
<p>log4j.appender.appenderName.layout.optionN=valueN</p>
</li>
</ul>
</li>
</ol>
</li>
<li>程序中使用Log4j</li>
</ol>
<ul>
<li>获得日志记录器：
<ul>
<li>获得rootLogger：Logger rootLogger=Logger.getRootLogger(); </li>
<li>获得自定义Logger：Logger myLogger = Logger.getLogger(&quot;log4j.logger.myLogger&quot;);</li>
</ul>
</li>
<li>读取日志记录器，配置Log4J环境;
<ol>
<li>BasicConfigurator.configure(): 自动快速地使用默认Log4J环境; </li>
<li>Property.configurator.configure(String configFilename): 读取使用Java属性格式的配置文件并配置Log4J环境； </li>
<li>DOMConfigurator.configure(String filename): 读取XML形式的配置文件并配置LOG4J环境;</li>
</ol>
</li>
<li>输出日志信息;
<ul>
<li>在程序代码中需要生成日志的地方，调用Logger的各种输出日志方法输出不同级别的日志，例如：
<ul>
<li>myLogger.debug(&quot;Thie is a log message from the &quot; + myLogger.getName());</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><a href="http://17fav.com/?url=http%3A%2F%2Fwww.hialex.net%2F2008%2F04%2Flog4j-note-b.html&title=Log4j%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%28B%29" title="用 17fav 收藏和分享本文"><img src="http://17fav.com/i/bookmark.gif" alt="17fav 收藏本文" /></a></p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>2008-04-20 -- <a href="http://www.hialex.net/2008/04/log4j-note-a.html" title="Log4j学习笔记(A)">Log4j学习笔记(A)</a> (0)</li><li>2009-03-08 -- <a href="http://www.hialex.net/2009/03/mysql-notes-3.html" title="MySQL读书笔记(3)">MySQL读书笔记(3)</a> (0)</li><li>2009-03-03 -- <a href="http://www.hialex.net/2009/03/mysql-notes-2.html" title="MySQL读书笔记(2)">MySQL读书笔记(2)</a> (0)</li><li>2009-03-02 -- <a href="http://www.hialex.net/2009/03/mysql-notes-1.html" title="MySQL读书笔记(1)">MySQL读书笔记(1)</a> (0)</li><li>2008-04-02 -- <a href="http://www.hialex.net/2008/04/servlet-note.html" title="Servlet程序设计">Servlet程序设计</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.hialex.net/2008/04/log4j-note-b.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Log4j学习笔记(A)</title>
		<link>http://www.hialex.net/2008/04/log4j-note-a.html</link>
		<comments>http://www.hialex.net/2008/04/log4j-note-a.html#comments</comments>
		<pubDate>Sun, 20 Apr 2008 08:29:54 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[log4j]]></category>
		<category><![CDATA[笔记]]></category>

		<guid isPermaLink="false">http://www.hialex.net/2008/04/log4j-note-a.html</guid>
		<description><![CDATA[一、LOG4J组成
LOG4J主要由三大组件组成：

Logger: 决定什么日志信息应该被输出、什么日志信息应该被忽略；
l Appender: 指定日志信息应该输出到什么地方, 这些地方可以是控制台、文件、网络设备；
l Layout: 指定日志信息的输出格式；

一个Logger可以有多个Appender，也就是说日志信息可以同时输出到多个设备上，每个Appender对应
二、Logger组件

Logger组件提供的方法：

Logger组件是LOG4J的核心组件，它代表了Log4J的日志记录器，它能够对日志信息进行分类筛选。它由org.apache.log4j.Logger类实现，提供了如下方法：

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package org.apache.log4j;
&#160;
public class Logger &#123;
&#160;
// Creation &#38;amp; retrieval methods:
&#160;
public static Logger getRootLogger&#40;&#41;;
&#160;
public static Logger getLogger&#40;String name&#41;;
&#160;
// printing methods:
&#160;
public void debug&#40;Object message&#41;;
&#160;
public void info&#40;Object message&#41;;
&#160;
public void warn&#40;Object message&#41;;
&#160;
public void error&#40;Object message&#41;;
&#160;
public void fatal&#40;Object message&#41;;
&#160;
// generic printing method:
&#160;
public void log&#40;Priority p, Object message&#41;;
&#160;
&#125;




在配置文件中配置Logger组件

可在Log4J配置文件中配置自己的Logger组件，示例：log4j.logger.myLogger=WARN
以上代码定义了一个Logger组件，名称为myLogger，日志级别为WARN。


日志级别种类：

一共有五种，级别由高到低依次是：fatal、error、warn、info、debug。获得Logger实例后，我们可调用以下方法之一输出日志信息：



public void debug(Object message); //输出debug级别的日志信息；
public void info(Object message); //输出info级别的日志信息；
public [...]]]></description>
			<content:encoded><![CDATA[<p>一、LOG4J组成</p>
<p>LOG4J主要由三大组件组成：</p>
<ul>
<li>Logger: 决定什么日志信息应该被输出、什么日志信息应该被忽略；</li>
<li>l Appender: 指定日志信息应该输出到什么地方, 这些地方可以是控制台、文件、网络设备；</li>
<li>l Layout: 指定日志信息的输出格式；</li>
</ul>
<p>一个Logger可以有多个Appender，也就是说日志信息可以同时输出到多个设备上，每个Appender对应</p>
<p>二、Logger组件</p>
<ol>
<li>Logger组件提供的方法：
<ul>
<li>Logger组件是LOG4J的核心组件，它代表了Log4J的日志记录器，它能够对日志信息进行分类筛选。它由org.apache.log4j.Logger类实现，提供了如下方法：

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">org.apache.log4j</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Logger <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Creation &amp;amp; retrieval methods:</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> Logger getRootLogger<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> Logger getLogger<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> name<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// printing methods:</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> debug<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> info<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> warn<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> error<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> fatal<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// generic printing method:</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> log<span style="color: #009900;">&#40;</span>Priority p, <span style="color: #003399;">Object</span> message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</li>
</ul>
</li>
<li>在配置文件中配置Logger组件
<ul>
<li>可在Log4J配置文件中配置自己的Logger组件，示例：log4j.logger.myLogger=WARN</li>
<li>以上代码定义了一个Logger组件，名称为myLogger，日志级别为WARN。</li>
</ul>
</li>
<li>日志级别种类：
<ul>
<li>一共有五种，级别由高到低依次是：fatal、error、warn、info、debug。获得Logger实例后，我们可调用以下方法之一输出日志信息：<br />
<table border="1" cellspacing="0" cellpadding="2" width="509">
<tbody>
<tr>
<td width="507" valign="top">public void debug(Object message); //输出debug级别的日志信息；</p>
<p>public void info(Object message); //输出info级别的日志信息；</p>
<p>public void warn(Object message); //输出warn级别的日志信息；</p>
<p>public void error(Object message); //输出error级别的日志信息；</p>
<p>public void fatal(Object message); //输出fatal级别的日志信息；</p>
<p>public void log(Priority p, Object message);//输出参数Priority指定级别的日志信息；</td>
</tr>
</tbody>
</table>
</li>
<li>以上方法只有当它的级别大于或等于Logger组件配置的日志级别时才调用。以前面我们配置的myLogger为例，它的日志级别为WARN, 那么在程序中，它的warn()、error()、fatal()方法会被执行。对于log()方法，只有当它的参数Priority指定的日志级别大于或等于WARN时，它才会被执行。</li>
</ul>
</li>
<li>为什么需要对日志进行分级？
<ul>
<li>在写程序的时候，为了调试程序，我们会在很多出错的地方输出大量的日志信息。当程序调试完，不需要这些信息时，将程序中这些输出日志信息代码删除吗？这样费时费力，对于大型程序几乎不可行。通过对日志分级，假如不想输出WARN级别的日志信息，则Logger组件的级别调高即可，省时省心。</li>
</ul>
</li>
<li>Logger组件的继承性
<ul>
<li>Log4J提供了一个root Logger，它是所有Logger组件的“祖先”,它永远存在，且不能通过名字检索或引用，通过Logger.getRootLogger()方法取得它。配置root Logger代码：log4j.rootLogger=INFO,console</li>
<li>可在配置文件中方便地配置存在继承关系的Logger组件，凡是在符号“.”后面的组件都会成为在符号&#8221;.&#8221;前面的Logger组件的子类。例
<ul>
<li>log4j.apache.myLogger=WARN</li>
<li>log4j.apache.myLogger.mySonLogger=,file</li>
<li>以上代码中, mySonLogger是myLogger的子类Logger组件。Logger组件的继承关系：</li>
</ul>
</li>
<li>如果子类Logger组件没有定义日志级别，则将继承父类的日志级别;</li>
<li>如果子类Logger组件定义了日志级别，就不会继承父类的日志级别;</li>
<li>黙认情况下，子类Logger组件会继承父类所有的Appender，把它们加入到自己的Appener;</li>
<li>如果把子类Logger组件的additivity标志设为false，那么它就不会继承父类Appender。additivity标志 默认值为false；</li>
<li>以上配置的三个Logger继承关系示例如图：</li>
<li>这三个Logger组件实际日志级别和Appender如下表：<br />
<table border="1" cellspacing="0" cellpadding="2" width="400">
<tbody>
<tr>
<td width="133" valign="top">Logger组件</td>
<td width="133" valign="top">日志级别</td>
<td width="133" valign="top">Appender清单</td>
</tr>
<tr>
<td width="133" valign="top">root Logger</td>
<td width="133" valign="top">INFO</td>
<td width="133" valign="top">console</td>
</tr>
<tr>
<td width="133" valign="top">myLogger</td>
<td width="133" valign="top">WARN</td>
<td width="133" valign="top">console(继承)</td>
</tr>
<tr>
<td width="133" valign="top">mySonLogger</td>
<td width="133" valign="top">WARN(继承)</td>
<td width="133" valign="top">file，console(继承)</td>
</tr>
</tbody>
</table>
</li>
</ul>
</li>
</ol>
<p><a href="http://17fav.com/?url=http%3A%2F%2Fwww.hialex.net%2F2008%2F04%2Flog4j-note-a.html&title=Log4j%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%28A%29" title="用 17fav 收藏和分享本文"><img src="http://17fav.com/i/bookmark.gif" alt="17fav 收藏本文" /></a></p><h3  class="related_post_title">Related Posts</h3><ul class="related_post"><li>2008-04-21 -- <a href="http://www.hialex.net/2008/04/log4j-note-b.html" title="Log4j学习笔记(B)">Log4j学习笔记(B)</a> (0)</li><li>2009-03-08 -- <a href="http://www.hialex.net/2009/03/mysql-notes-3.html" title="MySQL读书笔记(3)">MySQL读书笔记(3)</a> (0)</li><li>2009-03-03 -- <a href="http://www.hialex.net/2009/03/mysql-notes-2.html" title="MySQL读书笔记(2)">MySQL读书笔记(2)</a> (0)</li><li>2009-03-02 -- <a href="http://www.hialex.net/2009/03/mysql-notes-1.html" title="MySQL读书笔记(1)">MySQL读书笔记(1)</a> (0)</li><li>2008-04-02 -- <a href="http://www.hialex.net/2008/04/servlet-note.html" title="Servlet程序设计">Servlet程序设计</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.hialex.net/2008/04/log4j-note-a.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
