剑客
关注科技互联网

log4j基本配置

log4j基本配置

log4j是Java Web中最常用的日志输出框架,这里记录下常用配置。

在log4j中日志添加器(Appender)负责将日志事件(LogEvent)传递给相应的目的地,Appender的常用实现有很多,比如ConsoleAppender,AsyncAppender,FileAppender等等,有各自的应用场景。

关于日志输出级别请自行理解。

DailyRollingFileAppender继承自FileAppender,顾名思义,就是以一定得周期决定是否对日志文件进行转存(roll over),是否对日志文件转存取决于DatePattern,转存后的文件名也依赖于DatePattern的配置。

log4j基本配置

DatePattern遵循SimpleDateFormat的模式,指定的字符常量放在单引号中。例如下面的配置表明日志输出级别是INFO,日志添加器(Appender )的名称是foo,采用的文件追加方式是DailyRollingFileAppender,日志输出文件名是foo.log,每天凌晨会把当日日志文件重命名为foo.log2016-10-08.log的形式,次日的日志输出文件仍然是foo.log。

LOG_DIR=D://logs
log4j.logger.com.vonzhou.learn.Foo=info,foo
log4j.appender.foo=org.apache.log4j.DailyRollingFileAppender
log4j.appender.foo.File=${LOG_DIR}/foo.log
log4j.appender.foo.DatePattern=yyyy-MM-dd'.log'

更多的转存调度可以参考1:

log4j基本配置

PatternLayout的目的是格式化日志输出,结果依赖于ConversionPattern的配置。更详细的格式含义参考2,下面是几个常用的。

格式化转义字符含义c类全名,后面可以指定输出精度d日志,后面可以指定日期格式p输出日志级别L输出日志输出语句所在源文件的行号m应用层日志输出的具体消息n换行符

log4j.additivity用于控制子Logger是否把日志也添加到父Logger的文件中,比如:

log4j.logger.com.vonzhou.learn.foo=info,foo
log4j.logger.com.vonzhou.learn.foo.bar=info,bar

就配置了foo,bar两个log appender,其中bar的父亲是foo,默认情况下bar的日志输出也会加到foo的输出中,所以可以使用log4j.additivity配置true/false改变默认,比如下面配置bar的日志输出不加到foo的输出中。

log4j.additivity.com.vonzhou.learn.foo.bar = false

配置举例

输出到控制台:

log4j.rootLogger =info, stdout                                                               
log4j.appender.app=org.apache.log4j.ConsoleAppender                                          
log4j.appender.app.Target=System.out                                                         
log4j.appender.app.layout=org.apache.log4j.PatternLayout                                     
log4j.appender.app.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n

指定整个应用的日志输出:

log4j.rootLogger =info, app
log4j.appender.app=org.apache.log4j.DailyRollingFileAppender
log4j.appender.app.File=${LOG_DIR}/app.log
log4j.appender.app.DatePattern=yyyy-MM-dd'.log'
log4j.appender.app.Append=true
log4j.appender.app.layout=org.apache.log4j.PatternLayout
log4j.appender.app.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n

为不同的模块分别制定不同的输出文件:

log4j.logger.com.vonzhou.learn.foo=info,foo
log4j.appender.foo=org.apache.log4j.DailyRollingFileAppender
log4j.appender.foo.File=${LOG_DIR}/foo.log
log4j.appender.foo.DatePattern=yyyy-MM-dd'.log'
log4j.appender.foo.Append=true
log4j.appender.foo.layout=org.apache.log4j.PatternLayout
log4j.appender.foo.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c:%L - %m%n

总结

本文使用的是log4j 1,很多异步的特性有待继续学习。

参考

  1. DailyRollingFileAppender
  2. PatternLayout
  3. Appenders
分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址