Posted on 2008-04-16 12:00
wjywilliam 閱讀(2507)
評(píng)論(0) 編輯 收藏 所屬分類:
Log4j
1. 以下是針對(duì)指定pakage層輸出到單獨(dú)Log文件實(shí)例
在配置文件中按包名或類名來(lái)定義Logger
在程序中按類名取Logger
定義:
log4j.rootLogger=debug,stdout
log4j.logger.com.mypkg=debug,mypkg
log4j.logger.com.mypkg.db=info,db
log4j.logger.com.mypkg.mail=debug,mail
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5r [%5p][%c{2}] %m%n
log4j.appender.mypkg=org.apache.log4j.RollingFileAppender
log4j.appender.mypkg.File=system.log
log4j.appender.mypkg.Append=true
log4j.appender.mypkg.MaxFileSize=1MB
log4j.appender.mypkg.MaxBackupIndex=1
log4j.appender.mypkg.layout=org.apache.log4j.PatternLayout
log4j.appender.mypkg.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n
log4j.appender.db=org.apache.log4j.FileAppender
log4j.appender.db.File=db.log
log4j.appender.db.Append=true
log4j.appender.db.layout=org.apache.log4j.PatternLayout
log4j.appender.db.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n
log4j.appender.mail=org.apache.log4j.FileAppender
log4j.appender.mail.File=mail.log
log4j.appender.mail.Append=true
log4j.appender.mail.layout=org.apache.log4j.PatternLayout
log4j.appender.mail.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n
log4j.additivity.com.mypkg=false
log4j.additivity.com.mypkg.db=false
log4j.additivity.com.mypkg.mail=false
使用:
package com.mypkg;
public class Class1
{
private static Logger logger = Logger.getLogger(Class1.class);
...
if(logger.isDebugEnabled())
logger.debug("debug info");
...
}
package com.mypkg.db;
public class Class2
{
private static Logger logger = Logger.getLogger(Class2.class);
...
if(logger.isDebugEnabled())
logger.debug("debug info");
...
}
package com.mypkg.mail;
public class Class3
{
private static Logger logger = Logger.getLogger(Class3.class);
...
if(logger.isDebugEnabled())
logger.debug("debug info");
...
}
這樣一來(lái):
com.mypkg.mail下的類(Class3)的日志就會(huì)記入mail.log
com.mypkg.db下的類(Class2)的日志就會(huì)記入db.log
com.mypkg下的類(Class1)及類似com.mypkg.pkg1這樣的未定義相應(yīng)Logger的包下的類(com.mypkg.pkg1.Class4)的日志就會(huì)記入system.log
com.mypkg以外的類(com.pkg1.Class5)的日志就會(huì)記錄到rootLogger,即輸出到控制臺(tái)
不管增加還是刪除日志配置項(xiàng),都不需要修改程序:
如果想去掉其中一個(gè),如mail,只需從配置文件中去掉"log4j.logger.com.mypkg.mail=info,mail"這一行,去掉后com.mypkg.mail包下的類(如Class3)的日志就會(huì)記入system.log中。
如果要新增Logger,如com.mypkg.pkg2,只需在配置文件中增加類似配置,com.mypkg.pkg2包下的類的日志就會(huì)記入新增的log文件,而不再記入system.log文件。
2. 以下是針對(duì)某個(gè)class單獨(dú)輸出到Log文件實(shí)例
還可以為指定類配置一個(gè)logger,如為類com.mypkg.db.ConnectionPool配置一個(gè)logger:
log4j.logger.com.mypkg.db.ConnectionPool=debug,pool
log4j.appender.pool=org.apache.log4j.FileAppender
log4j.appender.pool.File=pool.log
log4j.appender.pool.Append=true
log4j.appender.pool.layout=org.apache.log4j.PatternLayout
log4j.appender.pool.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n
log4j.additivity.com.mypkg.db.ConnectionPool=false
這樣一來(lái),ConnectionPool類的日志就會(huì)記入pool.log,不會(huì)記入db.log
還可以兩個(gè)Logger使用同一個(gè)appender:
log4j.logger.com.pkg1=debug,system
log4j.logger.com.pkg2=info,system
這樣的話com.pkg1和com.pkg2下的日志會(huì)分別以degug和info級(jí)別輸出到system這個(gè)appender指定的文件中
3. 以下是針對(duì)指定Log Level單獨(dú)輸出到單獨(dú)的Log文件實(shí)例
log4j.logger.errorLogger=ERROR, errorLog
log4j.appender.errorLogger=org.apache.log4j.RollingFileAppender
log4j.appender.errorLogger.File=/logs/error/errorLog.log
log4j.appender.errorLogger.MaxFileSize=512KB
log4j.appender.errorLogger.MaxBackupIndex=3
log4j.appender.errorLogger.layout=org.apache.log4j.PatternLayout
log4j.appender.errorLogger.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n
關(guān)鍵在程序里面new log object時(shí)候這樣寫:
慣例:
Log log = LogFactory.getLog(this.getClass());
指定輸出的appender(appender制定輸出的Level):
Log log = LogFactory.getLog(errorLog);