1.log4j主要的三个组件:Loggers(记录器)、Appenders(输出源)、Layouts(布局)
|- Loggers
分为五个级别:debug、info、warn、error、fatal,其重要程度为:debug<info<warn<error<fatal
log4j的规则之一:输出级别不低于设定级别的日志信息,如:设定级别为info,info,warn,error,fatal都会输出,而debug不会输出。
|- Appenders
禁用和使用日志请求只是log4j的基本功能,log4j还可以提供许多强大的功能,如把日志输出到不同的地方:控制台console、文件files等,可以根据天数或者文件大小产生新的文件,可以以留的形式发送到其他地方。
常使用的类如下:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定大小的时候产生新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定地方)
配置模式:
log4j.appender.appenderName=className
log4j.appender.appenderName.Option1=value1
...
log4j.appender.appenderName.OptionN=valueN
|- Layouts
如果希望日志系统根据自己的喜好格式化自己的日志输出,log4j可以在appenders的后面附加layouts来完成这个功能。
Layouts提供四种日志输出样式:HTML样式,自由指定样式,包含日志级别与信息的样式和包含日志时间、线程、级别等信息的样式
常使用的类如下:
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)
配置模式:
log4j.appender.appenderName.Layout=className
log4j.appender.appenderName.layout.Option1=value1
...
log4j.appender.appenderName.layout.OptionN=valueN
2.配置详解
在实际应用中,要是log4j在系统中运行必须事先设定配置文件,配置文件事实上也是对Logger、Appender、Layout进行相应设定,一种是XML格式的文件,一种是properties属性文件。
下面以properties属性文件为例介绍log4j.properties的配置
2.1 配置根Logger:
|- log4j.rootLogger=level,appenderName1,appenderName2,......
level:设定日志记录的最低级别,可设置OFF,DEBUG,INFO,WARN,ERROR,FATAL,ALL,log4j建议只是用中间四个级别。
appenderName:指定日志信息输出到哪里,可以同时指定多个输出目的地,用逗号隔开
如:log4j.rootLogger=INFO,Console,dailyFile
|- log4j.additivity.org.apache=false,表示Logger不会再父Logger的appender里面输出,默认为true
2.2配置日志信息输出目的地Appender
|- log4j.appender.appenderName=className
appenderName:自定义appenderName,在log4j.rootLogger设置中使用
className可设置值如下:
org.apache.log4j.[ConsoleAppender(控制台),FileAppender(文件),DailyRollingFileAppender(每天产生一个日志文件),RollingFileAppender(文件大小到达指定大小产生新的文件),WriteAppender(将日志信息以流的格式发送到任意的地方)]
如:log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender
通用选项:
Threshold=WARN,指定日志信息的最低输出级别,默认DEBUG
ImmediateFlush=true,表示所有消息都会被立即输出,设置false为不输出,默认true
|-ConsoleAppender选项:
Threshold=WARN,指定日志信息的最低输出级别,默认DEBUG
ImmediateFlush=true,表示所有消息都会被立即输出,设置false为不输出,默认true
Target=System.err:指定作为系统错误输出,默认值是System.out
|-FileAppender选项
Append=true,表示消息覆盖指定的文件内容,true表示增加,默认是true
File=D:/logs/logging.log4j,表示消息输出到D盘logs文件夹logging.log4j文件中
|-DailyRollingFileAppender选项
Append=true,同FileAppender.Append
File=D:/logs/logging.log4j,同上
DatePattern="."yyyy-MM,每月滚动一次日志文件,即每月产生一个新的日志文件,当月日志文件名为logging.log4j,前一个月的日志文件名为logging.log4j.yyyy-MM
另外也可以指定按周、天、时、分等来滚动日志文件,对应格式如下:
1) "."yyyy-MM 每月
2) "."yyyy-ww 每周
3) "."yyyy-MM-dd 每天 "."yyyy-MM-dd-a 每天两次
4) "."yyyy-MM-dd-HH 每小时
5) "."yyyy-MM-dd-HH-mm 每分钟
|-RollingFileAppender选项
Append=true,同上
File=D:/logs/logging.log4j,同上
MaxFileSize=2MB,指定文件大小为多少的时候开始换新的文件,单位可以使KB/MB/GB,新文件产生,将原来的内容移动到logging.log4j.1文件中
MaxBackupIndex=2,指定可以产生的滚动文件的最大数,如设置2表示可以产生logging.log4j.1,logging.log4j.2两个滚动文件和logging.log4j
2.3配置日志信息的输出格式Layout
|-log4j.appender.appenderName.layout=className
className的值有:
org.apache.log4j.[HTMLLayout、PatternLayout、SimpleLayout、TTCCLayout]
|-PatternLayout选项
ConversioinPattern=%m%n
3.格式化符号说明:
%p,输出日志信息的优先级,即debug、info、warn、error、fatal
%d,输出日志时间点的日期或时间,默认格式为ISO8601,也可以指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}
%r,输出子应用程序启动到输出该log信息耗费的毫秒数
%t,输出产生该日志事件的线程名
%l,输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包含类全名、方法、文件名、在代码中的行数,如:test。TestLog4j.main(TestLog4j.java:10)
%c,输出日志信息所述的类目,通常就是所在类的全名
%M,输出产生日志信息的方法名
%F,暑促日志信息产生时所在的文件名称
%L,输出代码中的行数
%m,输出代码中指定的具体日志信息
%n,输出一个回车换行符,windows为/r/n unix为/n
%x,输出和当前线程相关联的NDC(嵌套诊断环境)
附:log4j配置示例
###设置日志文件级别###
log4j.rootLogger=debug,console,dailyFile,err
log4j.additivity.org.apache=true
###输出到控制台###
#指定控制台日志输出
log4j.appender.console=org.apache.log4j.ConsoleAppender
#输出级别debug
log4j.appender.console.Threshold=DEBUG
#指定立即输出
log4j.appender.console.ImmediateFlush=true
#指定作为系统标准输出,
log4j.appender.console.Target=System.out
#指定日志输出格式为灵活布局模式
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#设置日志输出显示消息格式 年-月-日 时:分:秒 ->信息级别 -类名:行数-信息
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}->[%p]-%c{1}:%L-%m%n
###保存日志到单独文件###
#指定超过文件大小限制时产生新的文件
log4j.appender.dailyFile=org.apache.log4j.RollingFileAppender
#指定日志记录级别info
log4j.appender.dailyFile.Threshold=INFO
#指定立即输出
log4j.appender.dailyFile.ImmediateFlush=true
#指定日志文件存放路径
log4j.appender.dailyFile.File=../logs/icer_servlet_log.log
#指定日志文件编码格式
log4j.appender.dailyFile.Encoding=UTF-8
#指定日志文件为追加保存
log4j.appender.dailyFile.Append=true
#指定日志文件最大5MB
log4j.appender.dailyFile.MaxFileSize=5MB
#指定日志文件最大滚动数为5
log4j.appender.dailyFile.MaxBackupIndex=5
#指定灵活布局模式输出
log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout
#指定输出格式
log4j.appender.dailyFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}->[%p]-%c{1}:%L-%m%n
###保存异常信息到单独文件###
log4j.appender.err=org.apache.log4j.RollingFileAppender
log4j.appender.err.Threshold=ERROR
log4j.appender.err.ImmediateFlush=true
log4j.appender.err.File=../logs/icer_servlet_error.log
log4j.appender.err.Encoding=UTF-8
log4j.appender.err.Append=true
log4j.appender.err.MaxFileSize=5MB
log4j.appender.err.MaxBackupIndex=5
log4j.appender.err.layout=org.apache.log4j.PatternLayout
log4j.appender.err.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}->[%p]-%c{1}:%L-%m%n
log4j.logger.com.opensymphony.xwork2=ERROR
|- Loggers
分为五个级别:debug、info、warn、error、fatal,其重要程度为:debug<info<warn<error<fatal
log4j的规则之一:输出级别不低于设定级别的日志信息,如:设定级别为info,info,warn,error,fatal都会输出,而debug不会输出。
|- Appenders
禁用和使用日志请求只是log4j的基本功能,log4j还可以提供许多强大的功能,如把日志输出到不同的地方:控制台console、文件files等,可以根据天数或者文件大小产生新的文件,可以以留的形式发送到其他地方。
常使用的类如下:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定大小的时候产生新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定地方)
配置模式:
log4j.appender.appenderName=className
log4j.appender.appenderName.Option1=value1
...
log4j.appender.appenderName.OptionN=valueN
|- Layouts
如果希望日志系统根据自己的喜好格式化自己的日志输出,log4j可以在appenders的后面附加layouts来完成这个功能。
Layouts提供四种日志输出样式:HTML样式,自由指定样式,包含日志级别与信息的样式和包含日志时间、线程、级别等信息的样式
常使用的类如下:
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)
配置模式:
log4j.appender.appenderName.Layout=className
log4j.appender.appenderName.layout.Option1=value1
...
log4j.appender.appenderName.layout.OptionN=valueN
2.配置详解
在实际应用中,要是log4j在系统中运行必须事先设定配置文件,配置文件事实上也是对Logger、Appender、Layout进行相应设定,一种是XML格式的文件,一种是properties属性文件。
下面以properties属性文件为例介绍log4j.properties的配置
2.1 配置根Logger:
|- log4j.rootLogger=level,appenderName1,appenderName2,......
level:设定日志记录的最低级别,可设置OFF,DEBUG,INFO,WARN,ERROR,FATAL,ALL,log4j建议只是用中间四个级别。
appenderName:指定日志信息输出到哪里,可以同时指定多个输出目的地,用逗号隔开
如:log4j.rootLogger=INFO,Console,dailyFile
|- log4j.additivity.org.apache=false,表示Logger不会再父Logger的appender里面输出,默认为true
2.2配置日志信息输出目的地Appender
|- log4j.appender.appenderName=className
appenderName:自定义appenderName,在log4j.rootLogger设置中使用
className可设置值如下:
org.apache.log4j.[ConsoleAppender(控制台),FileAppender(文件),DailyRollingFileAppender(每天产生一个日志文件),RollingFileAppender(文件大小到达指定大小产生新的文件),WriteAppender(将日志信息以流的格式发送到任意的地方)]
如:log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender
通用选项:
Threshold=WARN,指定日志信息的最低输出级别,默认DEBUG
ImmediateFlush=true,表示所有消息都会被立即输出,设置false为不输出,默认true
|-ConsoleAppender选项:
Threshold=WARN,指定日志信息的最低输出级别,默认DEBUG
ImmediateFlush=true,表示所有消息都会被立即输出,设置false为不输出,默认true
Target=System.err:指定作为系统错误输出,默认值是System.out
|-FileAppender选项
Append=true,表示消息覆盖指定的文件内容,true表示增加,默认是true
File=D:/logs/logging.log4j,表示消息输出到D盘logs文件夹logging.log4j文件中
|-DailyRollingFileAppender选项
Append=true,同FileAppender.Append
File=D:/logs/logging.log4j,同上
DatePattern="."yyyy-MM,每月滚动一次日志文件,即每月产生一个新的日志文件,当月日志文件名为logging.log4j,前一个月的日志文件名为logging.log4j.yyyy-MM
另外也可以指定按周、天、时、分等来滚动日志文件,对应格式如下:
1) "."yyyy-MM 每月
2) "."yyyy-ww 每周
3) "."yyyy-MM-dd 每天 "."yyyy-MM-dd-a 每天两次
4) "."yyyy-MM-dd-HH 每小时
5) "."yyyy-MM-dd-HH-mm 每分钟
|-RollingFileAppender选项
Append=true,同上
File=D:/logs/logging.log4j,同上
MaxFileSize=2MB,指定文件大小为多少的时候开始换新的文件,单位可以使KB/MB/GB,新文件产生,将原来的内容移动到logging.log4j.1文件中
MaxBackupIndex=2,指定可以产生的滚动文件的最大数,如设置2表示可以产生logging.log4j.1,logging.log4j.2两个滚动文件和logging.log4j
2.3配置日志信息的输出格式Layout
|-log4j.appender.appenderName.layout=className
className的值有:
org.apache.log4j.[HTMLLayout、PatternLayout、SimpleLayout、TTCCLayout]
|-PatternLayout选项
ConversioinPattern=%m%n
3.格式化符号说明:
%p,输出日志信息的优先级,即debug、info、warn、error、fatal
%d,输出日志时间点的日期或时间,默认格式为ISO8601,也可以指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}
%r,输出子应用程序启动到输出该log信息耗费的毫秒数
%t,输出产生该日志事件的线程名
%l,输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包含类全名、方法、文件名、在代码中的行数,如:test。TestLog4j.main(TestLog4j.java:10)
%c,输出日志信息所述的类目,通常就是所在类的全名
%M,输出产生日志信息的方法名
%F,暑促日志信息产生时所在的文件名称
%L,输出代码中的行数
%m,输出代码中指定的具体日志信息
%n,输出一个回车换行符,windows为/r/n unix为/n
%x,输出和当前线程相关联的NDC(嵌套诊断环境)
附:log4j配置示例
###设置日志文件级别###
log4j.rootLogger=debug,console,dailyFile,err
log4j.additivity.org.apache=true
###输出到控制台###
#指定控制台日志输出
log4j.appender.console=org.apache.log4j.ConsoleAppender
#输出级别debug
log4j.appender.console.Threshold=DEBUG
#指定立即输出
log4j.appender.console.ImmediateFlush=true
#指定作为系统标准输出,
log4j.appender.console.Target=System.out
#指定日志输出格式为灵活布局模式
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#设置日志输出显示消息格式 年-月-日 时:分:秒 ->信息级别 -类名:行数-信息
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}->[%p]-%c{1}:%L-%m%n
###保存日志到单独文件###
#指定超过文件大小限制时产生新的文件
log4j.appender.dailyFile=org.apache.log4j.RollingFileAppender
#指定日志记录级别info
log4j.appender.dailyFile.Threshold=INFO
#指定立即输出
log4j.appender.dailyFile.ImmediateFlush=true
#指定日志文件存放路径
log4j.appender.dailyFile.File=../logs/icer_servlet_log.log
#指定日志文件编码格式
log4j.appender.dailyFile.Encoding=UTF-8
#指定日志文件为追加保存
log4j.appender.dailyFile.Append=true
#指定日志文件最大5MB
log4j.appender.dailyFile.MaxFileSize=5MB
#指定日志文件最大滚动数为5
log4j.appender.dailyFile.MaxBackupIndex=5
#指定灵活布局模式输出
log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout
#指定输出格式
log4j.appender.dailyFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}->[%p]-%c{1}:%L-%m%n
###保存异常信息到单独文件###
log4j.appender.err=org.apache.log4j.RollingFileAppender
log4j.appender.err.Threshold=ERROR
log4j.appender.err.ImmediateFlush=true
log4j.appender.err.File=../logs/icer_servlet_error.log
log4j.appender.err.Encoding=UTF-8
log4j.appender.err.Append=true
log4j.appender.err.MaxFileSize=5MB
log4j.appender.err.MaxBackupIndex=5
log4j.appender.err.layout=org.apache.log4j.PatternLayout
log4j.appender.err.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}->[%p]-%c{1}:%L-%m%n
log4j.logger.com.opensymphony.xwork2=ERROR