﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-一个Java民工的Space-文章分类-Log4j</title><link>http://www.blogjava.net/wjywilliam/category/30837.html</link><description>Consciousness Of Programming - wjywilliam</description><language>zh-cn</language><lastBuildDate>Sun, 27 Apr 2008 14:56:15 GMT</lastBuildDate><pubDate>Sun, 27 Apr 2008 14:56:15 GMT</pubDate><ttl>60</ttl><item><title>Log4j 各种输出配置方法运用实例</title><link>http://www.blogjava.net/wjywilliam/articles/193380.html</link><dc:creator>wjywilliam</dc:creator><author>wjywilliam</author><pubDate>Wed, 16 Apr 2008 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/wjywilliam/articles/193380.html</guid><wfw:comment>http://www.blogjava.net/wjywilliam/comments/193380.html</wfw:comment><comments>http://www.blogjava.net/wjywilliam/articles/193380.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wjywilliam/comments/commentRss/193380.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wjywilliam/services/trackbacks/193380.html</trackback:ping><description><![CDATA[<p><span style="font-size: 10pt"><br />
<span style="font-size: 12pt"><span style="font-family: Tahoma"></span></span></span><strong>&nbsp;1. <span style="font-size: 12pt">以下是针对指定pakage层输出到单独Log文件实例</span></strong></p>
<p><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-size: 10pt">在配置文件中按包名或类名来定义Logger<br />
在程序中按类名取Logger<br />
<br />
定义：<br />
log4j.rootLogger=debug,stdout<br />
log4j.logger.com.mypkg=debug,mypkg<br />
log4j.logger.com.mypkg.db=info,db<br />
log4j.logger.com.mypkg.mail=debug,mail<br />
<br />
log4j.appender.stdout=org.apache.log4j.ConsoleAppender<br />
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.stdout.layout.ConversionPattern=%5r [%5p][%c{2}] %m%n<br />
<br />
log4j.appender.mypkg=org.apache.log4j.RollingFileAppender<br />
log4j.appender.mypkg.File=system.log<br />
log4j.appender.mypkg.Append=true<br />
log4j.appender.mypkg.MaxFileSize=1MB<br />
log4j.appender.mypkg.MaxBackupIndex=1<br />
log4j.appender.mypkg.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.mypkg.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n<br />
<br />
log4j.appender.db=org.apache.log4j.FileAppender<br />
log4j.appender.db.File=db.log<br />
log4j.appender.db.Append=true<br />
log4j.appender.db.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.db.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n<br />
<br />
log4j.appender.mail=org.apache.log4j.FileAppender<br />
log4j.appender.mail.File=mail.log<br />
log4j.appender.mail.Append=true<br />
log4j.appender.mail.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.mail.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n<br />
<br />
log4j.additivity.com.mypkg=false<br />
log4j.additivity.com.mypkg.db=false<br />
log4j.additivity.com.mypkg.mail=false<br />
<br />
使用：<br />
package com.mypkg;<br />
public class Class1<br />
{<br />
&nbsp;&nbsp;&nbsp; private static Logger logger = Logger.getLogger(Class1.class);<br />
<br />
&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp; if(logger.isDebugEnabled())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("debug info");<br />
&nbsp;&nbsp;&nbsp; ...<br />
}<br />
<br />
package com.mypkg.db;<br />
public class Class2<br />
{<br />
&nbsp;&nbsp;&nbsp; private static Logger logger = Logger.getLogger(Class2.class);<br />
<br />
&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp; if(logger.isDebugEnabled())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("debug info");<br />
&nbsp;&nbsp;&nbsp; ...<br />
}<br />
<br />
package com.mypkg.mail;<br />
public class Class3<br />
{<br />
&nbsp;&nbsp;&nbsp; private static Logger logger = Logger.getLogger(Class3.class);<br />
<br />
&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp; if(logger.isDebugEnabled())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("debug info");<br />
&nbsp;&nbsp;&nbsp; ...<br />
}<br />
<br />
这样一来：<br />
&nbsp; com.mypkg.mail下的类(Class3)的日志就会记入mail.log<br />
&nbsp; com.mypkg.db下的类(Class2)的日志就会记入db.log<br />
&nbsp; com.mypkg下的类(Class1)及类似com.mypkg.pkg1这样的未定义相应Logger的包下的类(com.mypkg.pkg1.Class4)的日志就会记入system.log<br />
&nbsp; com.mypkg以外的类(com.pkg1.Class5)的日志就会记录到rootLogger，即输出到控制台<br />
<br />
不管增加还是删除日志配置项，都不需要修改程序：<br />
&nbsp;&nbsp;&nbsp; 如果想去掉其中一个，如mail，只需从配置文件中去掉"log4j.logger.com.mypkg.mail=info,mail"这一行，去掉后com.mypkg.mail包下的类(如Class3)的日志就会记入system.log中。<br />
&nbsp;&nbsp;&nbsp; 如果要新增Logger，如com.mypkg.pkg2，只需在配置文件中增加类似配置，com.mypkg.pkg2包下的类的日志就会记入新增的log文件，而不再记入system.log文件。<br />
<br />
<strong style="font-size: 12pt">2. 以下是针对某个class单独输出到Log文件实例<br />
</strong></span></span></span></span></span><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-size: 10pt"><br />
还可以为指定类配置一个logger，如为类com.mypkg.db.ConnectionPool配置一个logger：<br />
&nbsp; log4j.logger.com.mypkg.db.ConnectionPool=debug,pool<br />
<br />
&nbsp; log4j.appender.pool=org.apache.log4j.FileAppender<br />
&nbsp; log4j.appender.pool.File=pool.log<br />
&nbsp; log4j.appender.pool.Append=true<br />
&nbsp; log4j.appender.pool.layout=org.apache.log4j.PatternLayout<br />
&nbsp; log4j.appender.pool.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n<br />
<br />
&nbsp; log4j.additivity.com.mypkg.db.ConnectionPool=false<br />
<br />
这样一来，ConnectionPool类的日志就会记入pool.log，不会记入db.log<br />
<br />
</span></span></span></span></span><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-size: 10pt"><font style="font-size: 10pt; font-family: Tahoma" size="3">还可以两个Logger使用同一个appender：<br />
&nbsp; log4j.logger.com.pkg1=debug,system<br />
&nbsp; log4j.logger.com.pkg2=info,system<br />
这样的话com.pkg1和com.pkg2下的日志会分别以degug和info级别输出到system这个appender指定的文件中<br />
<br />
</font></span></span></span></span></span><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-size: 10pt"><font style="font-size: 10pt; font-family: Tahoma" size="3"><strong style="font-size: 12pt">3. 以下是针对指定Log Level单独输出到单独的Log文件实例<br />
</strong></font></span></span></span></span></span><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-size: 10pt"><font style="font-size: 10pt; font-family: Tahoma" size="3"><br />
</font></span></span></span></span></span><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-size: 10pt"><font style="font-size: 10pt; font-family: Tahoma" size="3">&nbsp; log4j.logger.errorLogger=ERROR, errorLog<br />
</font></span></span></span></span></span><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-size: 10pt"><font style="font-size: 10pt; font-family: Tahoma" size="3"><br />
&nbsp; log4j.appender.errorLogger=org.apache.log4j.RollingFileAppender<br />
&nbsp; log4j.appender.errorLogger.File=/logs/error/errorLog.log<br />
&nbsp; log4j.appender.errorLogger.MaxFileSize=512KB<br />
&nbsp; log4j.appender.errorLogger.MaxBackupIndex=3<br />
&nbsp; log4j.appender.errorLogger.layout=org.apache.log4j.PatternLayout<br />
&nbsp; log4j.appender.errorLogger.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n<br />
<br />
</font></span></span></span></span></span><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-size: 10pt"><font style="font-size: 10pt; font-family: Tahoma" size="3">关键在程序里面new log object时候这样写：<br />
</font></span></span></span></span></span><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-size: 10pt"><font style="font-size: 10pt; font-family: Tahoma" size="3">惯例：<br />
</font></span></span></span></span></span><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-size: 10pt"><font style="font-size: 10pt; font-family: Tahoma" size="3">&nbsp;&nbsp; Log log = LogFactory.getLog(this.getClass());<br />
</font></span></span></span></span></span><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-size: 10pt"><font style="font-size: 10pt; font-family: Tahoma" size="3">指定输出的appender(appender制定输出的Level)：<br />
&nbsp;&nbsp; </font></span></span></span></span></span><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: Tahoma"><span style="font-size: 12pt"><span style="font-size: 10pt"><font style="font-size: 10pt; font-family: Tahoma" size="3">Log log = LogFactory.getLog(errorLog);<br />
</p>
</font></span></span></span></span></span>
<img src ="http://www.blogjava.net/wjywilliam/aggbug/193380.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wjywilliam/" target="_blank">wjywilliam</a> 2008-04-16 12:00 <a href="http://www.blogjava.net/wjywilliam/articles/193380.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>