日志级别
log4j 官网推荐使用以下几种,级别从高到低排列
Level | 描述 |
---|---|
ERROR | 错误事件可能仍然允许应用程序继续运行 |
WARN | 指定具有潜在危害的情况 |
INFO | 指定能够突出在粗粒度级别的应用程序运行情况的信息的消息 |
DEBUG | 指定细粒度信息事件是最有用的应用程序调试 |
Appender级别
org.apache.log4j.ConsoleAppender(输出到控制台),
org.apache.log4j.FileAppender(输出到文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
日志输出格式(layout)
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
日志打印格式
%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,
比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
举例:Testlog4.main(TestLog4.java: 10 )
将不同级别的log输出到用户自定义的文件中
我们工作中大多数是将所有的日志输出到一个文件中,因为在生产环境中如果不同级别的日志散落在不同的文件中,出个错那你就使劲找吧,但是log4j还是给我们提供了这个功能,以下我会给出具体的log4j.properties配置文件的详细内容,举例子出不同的场景.
log4j.properties
#将root级别设置成INFO,并输出到mainLog对应的Append文件中
log4j.rootLogger=INFO, mainLog ,stdout
#将DEBUG级别的日志输出到自定义的Appender中,这里mainLog的级别变成了DEBUG,他会覆盖
#之前的INFO
log4j.logger.log.DetailAppender=DEBUG, mainLog, detailLog
#将某个文件夹的日志级别设置成INFO,并追加到对应的xxAppender中
log4j.logger.com.csjd.xxx=INFO,xx,x
# 将stdout设置成控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.Threshold=DEBUG # 输出DEBUG及以上级别的日志
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
# 每天生成一个新的文件
log4j.appender.mainLog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.mainLog.File=${SA_LOG}/quickfix/mdccdh-info.log
log4j.appender.mainLog.DatePattern = '_'yyyy-MM-dd
log4j.appender.mainLog.Append=true
log4j.appender.stdout.Threshold=INFO # 输出INFO及以上级别的日志
#log4j.appender.mainLog.MaxBackupIndex=30
log4j.appender.mainLog.layout=org.apache.log4j.PatternLayout
log4j.appender.mainLog.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
tips:以上使用的${SA_LOG}为系统环境变量,log4j可以读取环境变量配置,前提是这个变量得存在,不然日志文件不会生成哦,log4j输出日志只会输出比他级别高的日志,不会向下.