配置文件主要包含三部分:日志等级、输出地址、输出格式
最简单配置文件如下
log4j.rootLogger=info, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
日志等级有7级,主要用到的是如下四个级别:ERROR、WARN、INFO、DEBUG,且大小写不敏感,使用如下
log4j.rootLogger=info
输出地址主要有5个:控制台ConsoleAppender,单个文件FileAppender,每天文件DailyRollingFileAppender,指定大小文件RollingFileAppender,流WriterAppender
使用的时候需要配置两个地方
#stdout为地址名称可以任意非关键字字符串
log4j.rootLogger=info, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-mm-dd hh:mm:ss.sss} %5p [%c] - %m%n
输出格式用的最多的是自定义patternLayout,所有格式包括4个:表格HTMLLayout、自定义PatternLayout、基础SimpleLayout、详细TTCCLayout,如下
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-mm-dd hh:mm:ss.sss} %5p [%c] - %m%n
【扩展】
也可以根据不同包控制日志级别
log4j.logger.com.ifre=info
log4j.logger.com.ifre.test=debug
日志输出到文件
### 输出DEBUG级别以上的日志到项目下/logs/log.log
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = ./logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-mm-dd hh:mm:ss.sss} [ %t:%r ] - [ %p ] [ %c ] %m%n
错误日志另外文件
### 输出ERROR 级别以上的日志到项目下/logs/error.log
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =./logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-mm-dd hh:mm:ss.sss} [ %t:%r ] - [ %p ] [ %c ] %m%n
自定义的输出格式参数配置如下
%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-mm-dd hh:mm:ss.sss},输出类似:2018-1-18 12:00:00.000
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 )