Log4J 1.x 配置详解

一 Log4J有三个主要的组件

1.1 Loggers(记录类型)

Log4j划分了5个级别:DEBUG,INFO,WARN,ERROR,FATAL。 这5个level是有优先级顺序的,DEBUG 指定的日志级别。比如你指定了WARN级别,可以输出WARN,ERROR和FATAL的日志,但是不会输出DEBUG和INFO级别的日志


1.2 Appenders(输出)

有了日志,那么日志应该输出到哪儿,控制台?文件? 那么Appenders就是来干这个事情的。Appenders有一下集中输出类型:
控制台:org.apache.log4j.ConsoleAppender
文件:org.apache.log4j.FileAppender
每天产生一个日志文件:org.apache.log4j.DailyRollingFileAppender
文件大小超过制定阀值产生一个新的文件:org.apache.log4j.RollingFileAppender
将日志信息以流的形式发送到任何地方:org.apache.log4j.WriterAppender


1.3 Layouts(布局)

Log4J提供了可以自己控制输出格式,Layouts就可以干这个事情,Layouts提供四种日志输出格式:
HTML表格形式:org.apache.log4j.HTMLLayout
灵活地指定布局模式:org.apache.log4j.PatternLayout
包含INFO类型的布局模式:org.apache.log4j.SimpleLayout
包含线程,日志类型的布局模式:org.apache.log4j.TTCCLayout


二 配置Log4J

Log4j支持两种配置文件格式,一种是XML格式的文件,一种是properties属性文件。下面以properties属性文件为例介绍log4j.properties的配置。


2.1 配置Root Logger

log4j.rootLogger = level, appenders, appenders, ...


level :设定日志记录的最低级别,可设的值有OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别,Log4j建议只使用中间四个级别(ERROR、WARN、INFO、DEBUG)。通过在这里设定级别,您可以控制应用程序中相应级别的日志信息的开关,比如在这里设定了INFO级别,则应用程序中所有DEBUG级别的日志信息将不会被打印出来。


appenders:就是指定日志信息要输出到哪里。可以同时指定多个输出目的地,用逗号隔开


示例:log4j.rootLogger = DEBUG,stdout,D,R


2.2 配置日志信息输出目的地(appender)



2.2.1 ConsoleAppender

log4j.appender.${自定义appender名字}:指定Appender类型
log4j.appender.${自定义appender名字}.Threshold = 指定日志信息的最低输出级别,默认为DEBUG 
log4j.appender.${自定义appender名字}.ImmediateFlush = 消息都会被立即输出(true|false)
log4j.appender.${自定义appender名字}.Target = 输出类型(System.out|System.err)


示例:
log4j.appender.STDOUT = org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.Threshold = INFO
log4j.appender.STDOUT.ImmediateFlush = true
log4j.appender.STDOUT.Target = System.out




2.2.2 FileAppender

log4j.appender.${自定义appender名字} = 指定Appender类型
log4j.appender.${自定义appender名字}.Threshold = 指定日志信息的最低输出级别,默认为DEBUG 
log4j.appender.${自定义appender名字}.ImmediateFlush = 消息都会被立即输出(true|false)
log4j.appender.${自定义appender名字}.Append = 添加还是覆盖(true|false)
log4j.appender.${自定义appender名字}.File = 日志文件路径


示例:
log4j.appender.F=org.apache.log4j.FileAppender
log4j.appender.F.Threshold = DEBUG 
log4j.appender.F.ImmediateFlush = true
log4j.appender.F.Append = true
log4j.appender.F.File = /opt/app/logs/server.out


2.2.3 DailyRollingFileAppender

log4j.appender.${自定义appender名字} = 指定Appender类型
log4j.appender.${自定义appender名字}.Threshold = 指定日志信息的最低输出级别,默认为DEBUG 
log4j.appender.${自定义appender名字}.ImmediateFlush = 消息都会被立即输出(true|false)
log4j.appender.${自定义appender名字}.Append = 添加还是覆盖(true|false)
log4j.appender.${自定义appender名字}.File = 日志文件路径
log4j.appender.${自定义appender名字}.DatePattern = 指定日志滚动频率
常用的频率选项:
1)'.'yyyy-MM:每月
2)'.'yyyy-ww:每周
3)'.'yyyy-MM-dd:每天
4)'.'yyyy-MM-dd-a:每天两次
5)'.'yyyy-MM-dd-HH:每小时
6)'.'yyyy-MM-dd-HH-mm:每分钟
示例:
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.ImmediateFlush = true
log4j.appender.D.Append = true
log4j.appender.D.File = /opt/app/logs/server.out
log4j.appender.D.DatePattern = '.'yyyy-MM-dd


2.2.4 RollingFileAppender

log4j.appender.${自定义appender名字} = 指定Appender类型
log4j.appender.${自定义appender名字}.Threshold = 指定日志信息的最低输出级别,默认为DEBUG 
log4j.appender.${自定义appender名字}.ImmediateFlush = 消息都会被立即输出(true|false)
log4j.appender.${自定义appender名字}.Append = 添加还是覆盖(true|false)
log4j.appender.${自定义appender名字}.File = 日志文件路径
log4j.appender.${自定义appender名字}.MaxFileSize = 指定超过阀值数,然后滚动日志文件,单位可以是KB,MB,GB
log4j.appender.${自定义appender名字}.MaxBackupIndex = 备份数(可选参数)


示例:
log4j.appender.R = org.apache.log4j.RollingFileAppender
log4j.appender.R = org.apache.log4j.RollingFileAppender
log4j.appender.R.Threshold = DEBUG 
log4j.appender.R.ImmediateFlush = true
log4j.appender.R.Append = true
log4j.appender.R.File = /opt/app/logs/server.out
log4j.appender.R.MaxFileSize = 10MB


2.2.5 WriterAppender

是前面几个Appender的父类,如果我们要自定义Appedner,也可以继承WriterAppender








2.3 配置Layout

log4j.appender.${appenders}.layout= 类名


2.3.1 HTMLLayout

log4j.appender.stdout.layout.Title=设置title
log4j.appender.stdout.layout.LocationInfo=是否设置locationInfo(true|false)


2.3.2 PatternLayout

我们可以通过PatternLayout灵活地指定布局模式,ConversionPattern属性指定怎样格式化输出日志
格式化参数如下:
%p: 输出日志信息的优先级
%d: 输出日志时间点的日期或时间,指定日期格式%d{yyyy-MM-dd HH:mm:ss,SSS}
%r: 输出自应用程序启动到输出该log信息耗费的毫秒数
%t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包括类全名、方法、文件名以及在代码中的行数
%c: 输出日志信息所属的类全名
%M: 输出产生日志信息的方法名
%F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
%m: 输出代码中指定的具体日志信息
%n: 输出一个回车换行符
%-n参数:n表示数字,意思就是参数长度为n,如果参数长度不够,左对齐,然后剩余的位数则用空格填满,比如%-5p,如果是DEBUG的话就是DEBUG,长度为5 如果是info的话长度为4,剩余的一位用空格填满。


示例:


log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n


2.3.3 SimpleLayout

包含日志信息的级别和信息字符串


2.3.4 TTCCLayout

包含日志产生的线程、类别等等信息

你可能感兴趣的:(架构)