1, 配置根logger
log4j.rootLogger = [ level ] , appenderName1 , appenderName2
如log4j.rootLogger=INFO,console, localLogfile
后面都是并列作为根logger的
2, 配置子logger是否打印在父层级appender
log4j.additivity.tasklog(logger名)=false
false表示不打印在父层级appender,默认为true,打印在所有父层级appender
3, 自定义日志输出设置
设置自定义logger输出级别以及bean中的logger的时候,即具体包括哪些输出内容的时候,应该是log4j.logger.auditLogger=INFO,auditLogger,而不是log4j.appender.auditLogger=INFO,auditLogger
具体设置该logger的设置时使用log4j.appender.logname.XXX=XXX
log4j.logger.errorLogger=ERROR,errorLogger
log4j.appender.errorLogger=org.apache.log4j.DailyRollingFileAppender
输出目的地,每天产生一个日志文件
log4j.appender.errorLogger.DatePattern = '.'yyyy-MM-dd
每天一个日志的后缀格式,如tracer.log.2014-12-17
log4j.appender.errorLogger.File=${pafa.log.home}/ClientManage/tracer.log
日志输出目录
log4j.appender.errorLogger.layout=org.apache.log4j.PatternLayout
日志输出格式,一般为PatternLayout,表示灵活指定布局模式
log4j.appender.errorLogger.layout.ConversionPattern=[%d{MM/ddHH:mm:ss}][%-3p]%c{1}:%X{MDCString}%m%n
格式化日志信息
4, 性能优化
a) 使用缓冲方式输出日志,减少与磁盘的访问次数
log4j.appender.monitorAppender.BufferedIO=true
log4j.appender.monitorAppender.BufferSize=8192
这个选项用于告诉log4j输出日志的时候采用缓冲的方式,而不是即时flush方式,并且设定了缓冲为8K,8K是默认值,可以根据日志输出的情况来修改。这个选项很重要,在测试中发现,当并发访问很高,例如每一秒100个并发以上,使用缓存跟不使用缓冲差距很大。具体数字我这里就不列出来了。
另外我想说的是,log4j输出缓冲日志是以8K为单位的,因为磁盘的一个block为8K,这样可以减少碎片,也就是说假设你设置缓存为18K,log4j在16K(8K*2)的时候就会输出),而不是18K。
b)对输出级别进行判断,比如isInfoEnabled等,组装内容需要资源
组装输出内容之前可对logger的输出级别先进行判断而不要完全依赖log4j控制,因为组装输出日志内容也是要损耗效率的。
//若log4j并未开启info级日志记录,直接返回
if(!monitorLogger.isInfoEnabled()){
return;
}