详细信息请参照 如何使用Log4j? http://www.blogjava.net/rickhunter/articles/28133.html此文章写的比较详细。
先看我的log4j的配置:
Log4j.properties 放在src/resource目录下,会自动加载log4j配置(即使你使用junit测试此配置文件还会加载)。
# Global Log Level(OFF,FATAL,ERROR,WARN,INFO,DEBUG,ALL) ##假如是debug级别,OFF,FATAL,ERROR,WARN,INFO,DEBUG的将会打印 ##假如是INFO级别,OFF,FATAL,ERROR,WARN,INFO的将会打印 log4j.rootCategory=DEBUG, stdout , R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n log4j.appender.R=org.apache.log4j.DailyRollingFileAppender log4j.appender.R.File=D:\\myLog.log log4j.appender.R.layout=org.apache.log4j.PatternLayout 1log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n log4j.logger.com.neusoft=DEBUG log4j.logger.com.opensymphony.oscache=ERROR log4j.logger.net.sf.navigator=ERROR log4j.logger.org.apache.commons=ERROR log4j.logger.org.apache.struts=WARN log4j.logger.org.displaytag=ERROR log4j.logger.org.springframework=DEBUG log4j.logger.com.ibatis.db=WARN log4j.logger.org.apache.velocity=FATAL log4j.logger.com.canoo.webtest=WARN log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN log4j.logger.org.hibernate=DEBUG log4j.logger.org.logicalcobwebs=WARN
里面的详细语法请参照上面的链接,这里不做重复性叙述。
我在此说明两点:
(1),在项目中我们经常可以看到这样的代码:
if (logger.isDebugEnabled()) {
logger.debug(message);
}
为什么不直接logger.debug(message);而先判断有没有开启debug模式呢?
我们参照log4j源码分析:
org.apache.log4j. Categoryy
# Global Log Level(OFF,FATAL,ERROR,WARN,INFO,DEBUG,ALL) ##假如是debug级别,OFF,FATAL,ERROR,WARN,INFO,DEBUG的将会打印 ##假如是INFO级别,OFF,FATAL,ERROR,WARN,INFO的将会打印 log4j.rootCategory=DEBUG, stdout , R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n log4j.appender.R=org.apache.log4j.DailyRollingFileAppender log4j.appender.R.File=D:\\myLog.log log4j.appender.R.layout=org.apache.log4j.PatternLayout 1log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n log4j.logger.com.neusoft=DEBUG log4j.logger.com.opensymphony.oscache=ERROR log4j.logger.net.sf.navigator=ERROR log4j.logger.org.apache.commons=ERROR log4j.logger.org.apache.struts=WARN log4j.logger.org.displaytag=ERROR log4j.logger.org.springframework=DEBUG log4j.logger.com.ibatis.db=WARN log4j.logger.org.apache.velocity=FATAL log4j.logger.com.canoo.webtest=WARN log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN log4j.logger.org.hibernate=DEBUG log4j.logger.org.logicalcobwebs=WARN
以下是debug()的源码:
public void debug(Object message) { if(repository.isDisabled(Level.DEBUG_INT)) return; if(Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel())) { forcedLog(FQCN, Level.DEBUG, message, null); } }
表面看logger.isDebugEnabled和logge
repository.isDisabled(Level.
(2)对于这个log4j.appender.CONSOLE.layout的配置,刚开始理解不是很清晰,这些layout是干什么用的?
log4j.appender.CONSOLE.layout=
对于layout log4j提供了以下4种
org.apache.log4j.HTMLLayout(以H
org.apache.log4j.
org.apache.log4j.
org.apache.log4j.TTCCLayout(
在实际应用中这四种可能不能满足我们的需求:
比如
Public class MyLayout extends PatternLayout{ @Override Public String format(LoggingEvent event){ …这里你可以信用卡进行加密再记录日志日志 Supper.format(event); } }
这样我们在需要记录信用卡日志的时候就可以log4j.appender.CONSOLE.layout=
这样记录日志的时候就会调用你复写的MyLayout。format()来按照你的想法来记录日志了。
希望我对log4j的理解对大家有帮助,发现有错的我会改掉的,有需要分享的我会写进来的。