Log4j日志分文件打印配置规则
在实际工作中经常会碰到不同的日志要打印到不同的文件中,配置方法说明:
log4j.rootLogger=INFO,CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d;%p;%c{1};%m%n
log4j.logger.com.wangdc=DEBUG,wangdc
log4j.appender.wangdc = org.apache.log4j.RollingFileAppender
log4j.appender.wangdc.File = ${catalina.base}/logs/wangdc.log
log4j.appender.wangdc.Append = true
log4j.appender.wangdc.MaxFileSize = 50MB
log4j.appender.wangdc.MaxBackupIndex = 100
log4j.appender.wangdc.layout = org.apache.log4j.PatternLayout
log4j.appender.wangdc.layout.LocationInfo = true
log4j.appender.wangdc.layout.ConversionPattern=%d;%p;%c;(%t);%m%n
log4j.logger.akka=DEBUG,akka
log4j.appender.akka = org.apache.log4j.RollingFileAppender
log4j.appender.akka.File = ${catalina.base}/logs/akka.log
log4j.appender.akka.Append = true
log4j.appender.akka.MaxFileSize = 10MB
log4j.appender.akka.MaxBackupIndex = 100
log4j.appender.akka.layout = org.apache.log4j.PatternLayout
log4j.appender.akka.layout.LocationInfo = true
log4j.appender.akka.layout.ConversionPattern=%d;%p;%c;(%t);%m%n
以上配置实现如下效果:
com.wangdc包及子包中的debug以上日志打印到wangdc.log;
akka包及子包中的日志debug打印到akka.log;
所有info以上日志都会打印到控制台
如何实现更灵活的配置呢?
分析上述配置文件 :
1、如果类名为com.wangdc.*,会匹配到以下两条appender:
log4j.rootLogger=INFO,CONSOLE
log4j.logger.com.wangdc=DEBUG,wangdc
则日志打印到控制台和wangdc.log
2、如果类名为akka.*,与1同理
3、其他类,只匹配rootLogger,只会打印到控制台。
如果配置文件修改一下:
log4j.rootLogger=INFO,CONSOLE,wangdc
log4j.logger.com.wangdc=DEBUG
则:
1、com.wangdc包及子包中的debug以上日志打印到wangdc.log以及控制台(log4j.logger.com.wangdc会覆写rootLogger);
2、所有info以上日志打印打印到wangdc.log以及控制台,包括akka包中的类,此时akka包中的类会同时打印到两个文件 (其他类会匹配到rootLogger,发现有两个appender,Console和wangdc);
如果配置文件再修改一下:
log4j.rootLogger=INFO,CONSOLE,wangdc,akka
log4j.logger.com.wangdc=DEBUG
log4j.logger.akka=DEBUG
则:
1、所有info以上的日志都会同时打印到控制台、wangdc.log、akka.log.
2、com.wangdc包及akka包的debug以上的日志会同时打印到控制台、wangdc.log、akka.log.