Log4j由三个重要的组件构成:日志信息的优先级、日志信息的输出目的地和日志信息的输出格式。
日志信息的优先级从高到低有ERROR、WARN、INFO和DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。
配置Log4j
Log4j可直接在代码中配置,也可以在XML或Properties中进行配置,下面给出一个比较完整的使用properties的配置文件示例。
log4j.rootLogger=DEBUG,stdout,R
# log4j常用的优先级FATAL>ERROR>WARN>INFO>DEBUG
log4j.logger.org=ERROR,A1
log4j.logger.org.spring.web=DEBUG,A2
#A1设置输出地A1到文件,文件大小到达指定尺寸的时候产生一个新文件
log4j.appender.A1=org.apache.log4j.RollingFileAppender
###文件位置##
log4j.appender.A1.File=orglog.log
##文件大小
log4j.appender.A1.MaxFileSize=500 KB
log4j.appender.A1.MaxBackupIndex=50
log4j.appender.A1.Append=true
###设置A1的输出布局格式PatterLayout,(可以灵活地指定布局模式)##
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{ISO8601}-[%p][%C{1}]-%m%n
#A2设置输出地A2到文件,文件大小到达指定尺寸的时候产生一个新的文件
log4j.appender.A2=org.apache. log4j.RollingFileAppender
###文件位置##
log4j.appender.A2.File=springlog.log
###文件大小
log4j.appender.A2.MaxFileSize=500KB
log4j.appender.A2.MaxBackupIndex=50
log4j.appender.A2.Append=true
###设置A2的输出布局格式PatterLayout,(可以灵活地指定布局模式)###
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d{ISO8601}-[%p][%C{1}]-%m%n
##stdout应用于控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
###设置stdout的输出布局格式PatterLayout,(可以灵活地指定布局模式)##
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appedner.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %c -%m%n
#设置输出地R到文件,文件大小到达指定尺寸的时候产生一个新的文件
# log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=rootLog.log
log4j.appender.R.datePattern='.'yyyy-MM-dd
log4j.appender.R.append=true
#设置R的输出布局格式Patterlayout,可以灵活指定格式
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %c -%m%n
配置根Logger
log4j.rootLogger=[level],appenderName,appenderName.......
level有五个级别:FATAL,ERROR,WARN,INFO,DEBUG,若log4j.rootLogger=WARN,则意味着只有WARN,ERROR,FATAL被输出,DEBUG、INFO将被屏蔽掉
appenderName就是指定日志信息输出到哪个地方,可以同时指定多个输出目的地,如果 log4j.rootLogger=WARN,stdout,R,A1,则意味着有3个日志输出目的地stdout,R,A1,当然也可以指定具体包的日志输出方式,具体如下:
log4j. logger.org.spring.web=DEBUG,A2,就是说包org.spring.web下的日志输出采用的日志级别为DEBUG,输出目的地为A2,而不是和根日志的相同了。
指定日志输出位置
每个Logger都可以指定一个或者多个appenderName,log4j定义了很多输出位置的方式
ConsoleAppender:输出日志到控制台
FileAppender:输出日志到文件
DailyRollingFileAppender:扩展FileAppender,每天产生一个日志文件
RollingFileAppender:扩展FileAppender,备份容量达到一定大小的日志文件
WriterAppender:将日志信息以流格式发送到任意指定的地方
JDBCAppender:输出日志到数据库
SMTPAppender:把日志发送至邮件
下面分别进行举例:
1. ConsoleAppender:输出日志到控制台
log4j.appender.A1=org.apache.log4j.ConsoleAppender(指定输出到控制台)
log4j.appender.A1.Threshold=DEBUG(指定输出类别)
log4j.appender.A1.Target=System.out
log4j.appender.A1.layout=org.apache.log4j.PatternLayout(指定输出布局)
log4j.appender.A1.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %c - %m%n
2.FileAppender:输出日志到文件
log4j.appender.A1=org.apache.log4j.FileAppender(输出日志到文件)
log4j.appender.FILE.File=file.log(指定输出的路径和文件名)
log4j.appender.FILE.Append=false
log4j.appender.A1.layout=org.apache.log4j.PatternLayout(指定输出布局)
log4j.appender.a1.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %c -%m%n
3.RollingFileAppender:扩展FileAppender,备份容量达到一定大小的日志文件
log4j.appender.A1=org.apache.log4j.RollingFileAppender
##文件位置
log4j.appender.A1.File=orglog.log
##文件大小
log4j.appender.A1.MaxFileSize=500KB
log4j.appender.A1.MaxBackupIndex=50
log4j.appender.A1.Append=true
##设置A1的个输出布局格式PatterLayout,可以灵活地指定布局模式
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{ISO8601} -[%p] [%C{1}] -%m%n
4.JDBCAppender:输出日志到数据库
log4j.appender.A1=org.apache.log4j.jdbc.JDBCAppender##指定输出到数据库
log4j.appender.A1.URL=jdbc:mysql://localhost:3306/myApp##指定数据库URL
log4j.appender.A1.driver=com.mysql.jdbc.Driver#指定数据库驱动
log4j.appender.A1.user=root
log4j.appender.A1.password=root
log4j.appender.A1.sql=insert into log4j(message)values('%d({ISO8601}-[%p] [%C{1}]-%m%n')
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{ISO8601} -[%p] [%C{1}]-%m%n
5.SMTPAppender:把日志发送到文件
log4j.appender.A1=org.apache.log4j.net.SMTPAppender
log4j.appender.A1.Threshold=FATAL
log4j.appender.A1.BufferSize=10
log4j.appender.A1.From=wjx_5893@163.com#发件人
log4j.appender.A1.SMTPHost=mail.163.com#smtp服务器
log4j.appender.A1.Subject=Log4J Message
log4j.appender.A1.To=wjxbit@gmail.com#收件人
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.ConversionPattern=%d{ISO8601} -[%p][%C{1}] -%m%n
====================================
log4j.rootLogger=INFO,consoleAppender,errorLog,warnLog
###############################################################################
#每天文件的输出:DailyRollingFileAppender
#log4j.rootLogger = INFO,errorlogfile
log4j.appender.errorlogfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorlogfile.Threshold = ERROR
log4j.appender.errorlogfile.File = /usr/pc_platform/shuzhan_day.log
log4j.appender.errorlogfile.Append = true
#默认为true,添加到末尾,false在每次启动时进行覆盖
log4j.appender.errorlogfile.ImmediateFlush = true
#直接输出,不进行缓存
# ' . ' yyyy - MM: 每个月更新一个log日志
# ' . ' yyyy - ww: 每个星期更新一个log日志
# ' . ' yyyy - MM - dd: 每天更新一个log日志
# ' . ' yyyy - MM - dd - a: 每天的午夜和正午更新一个log日志
# ' . ' yyyy - MM - dd - HH: 每小时更新一个log日志
# ' . ' yyyy - MM - dd - HH - mm: 每分钟更新一个log日志
log4j.appender.errorlogfile.DatePattern = ' . ' yyyy - MM - dd ' .log '
#文件名称的格式
log4j.appender.errorlogfile.layout = org.apache.log4j.PatternLayout
log4j.appender.errorlogfile.layout.ConversionPattern =%d %p [ %c] - %m %n %d