在配置文件中按包名或類名來定義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");
...
}
這樣一來:
com.mypkg.mail下的類(Class3)的日誌就會記入mail.log
com.mypkg.db下的類(Class2)的日誌就會記入db.log
com.mypkg下的類(Class1)及相似com.mypkg.pkg1這樣的未定義相應Logger的包下的類(com.mypkg.pkg1.Class4)的日誌就會記入system.log
com.mypkg之外的類(com.pkg1.Class5)的日誌就會記錄到rootLogger,即輸出到控制檯
無論增長仍是刪除日誌配置項,都不須要修改程序:
若是想去掉其中一個,如mail,只需從配置文件中去掉"log4j.logger.com.mypkg.mail=info,mail"這一行,去掉後com.mypkg.mail包下的類(如Class3)的日誌就會記入system.log中。
若是要新增Logger,如com.mypkg.pkg2,只需在配置文件中增長相似配置,com.mypkg.pkg2包下的類的日誌就會記入新增的log文件,而再也不記入system.log文件。
還能夠爲指定類配置一個logger,如爲類com.mypkg.db.ConnectionPool配置一個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
這樣一來,ConnectionPool類的日誌就會記入pool.log,不會記入db.logapache