和大多数配置文件一样,log4j配置文件也有key-value形式和xml形式。这里主要记录一下key-value的形式
我们通过配置,可以创建出Log4j的运行环境。Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。
一、直接看一个配置文件(log4j.properties)
# 配置根log,第一个参数为你想要输出的日志的等级,后面的是自定义的输出源(appender) log4j.rootLogger = debug,console,I,E ### 这里定义第一个输出源的相关信息 #输出源console输出到控制台 log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.Target = System.out #日志格式输出方式,选着这种方式需要自定义格式 log4j.appender.console.layout = org.apache.log4j.PatternLayout #自定义格式 log4j.appender.console.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n ### 输出INFO级别的日志信息到G://PetLoveWorkSpace//ZRJCashVip//logs/info.log # I 是第二个输出源 log4j.appender.I = org.apache.log4j.DailyRollingFileAppender log4j.appender.I.File = G://PetLoveWorkSpace//ZRJCashVip//logs/info.log log4j.appender.I.Append = true # 这里可以配置本输出源打印的级别 log4j.appender.I.Threshold = INFO log4j.appender.I.layout = org.apache.log4j.PatternLayout log4j.appender.I.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n ### print error to = E://logs/error.log ### log4j.appender.E = org.apache.log4j.DailyRollingFileAppender log4j.appender.E.File =G://PetLoveWorkSpace//ZRJCashVip//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} [ %t:%r ] - [ %p ] %m%n
这里配置,所有日志将会在控制台输出。另外,INFO级别的日志还会打印到info.log文件。ERROR级别的日志打印到error.log
二、log4j配置文件详解
1、log4j.rootLogger = debug,console,I,E
这里:log4j.rootLogger=日志级别,appender1, appender2, ….
- 日志级别:all < debug < info < warn < error < fatal < off
- rootLogger默认是对整个工程生效,如果只想对某些包操作,那么:log4j.logger.com.service=info, appender1, appender2, ….表示该日志对package com.service生效
2、log4j.appender.I = org.apache.log4j.DailyRollingFileAppender
这里:log4j.appender.appender1=org.apache.log4j.日志输出的地方
- ConsoleAppender(控制台)
- FileAppender(文件)
- DailyRollingFileAppender(每天产生一个日志文件,例如上面这个语句)
- RollingFileAppender(文件大小到达指定尺寸时产生一个新的文件)
- WriteAppender(将日志信息以流格式发送到任意指定的地方)
- JDBCAppender(将日志信息保存到数据库中)
3、log4j.appender.I.File = G://PetLoveWorkSpace//ZRJCashVip//logs/info.log
这里: log4j.appender.appender1.File = 日志文件保存的地方
4、log4j.appender.I.Threshold = INFO
这里:根据日志别来打印,appender I 的级别是info,那么所有info级别的日志都将打印到appender I 指定的地方(一般是文件中嘛),比如,我上面配置文件中指定appender I 打印到info.log里。
这一条很有用,用这样的方法我们可以将error级别的之日信息单独打印到一个文件里,定位问题的时候就省去了再一堆日志文件里慢慢找错误信息的麻烦了。
5、log4j.appender.I.layout = org.apache.log4j.PatternLayout
这里:log4j.appender.appender1.layout=org.apache.log4j.日志布局格式
所谓的日志布局格式,就是指打印出来的日志适合什么样子的。
- HTMLLayout(以HTML表格形式布局)
- SimpleLayout(包含日志信息的级别和信息字符串)
- TTCCLayout(包含日志产生的时间,执行绪,类别等信息)
- PatternLayout(可以灵活的指定布局格式,常用)
这里的例子使用了最后一个,这种灵活指定的布局格式我们需要加上第六条,显示指定打印的具体格式。其他三条,可以试试就知道是什么样的了。
6、log4j.appender.I.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
这里:log4j.appender.appender1.layout.ConversionPattern=日志输出格式。
日志输出格式是自己指定的,具体这些符号代表什么意思如下:
- %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-M-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28
- %t 输出产生该日志事件的线程名
- %r 输出自应用启动到输出该日志信息所耗费的毫秒数
- %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
- %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”。
- %m 输出代码中指定的信息,如log(message)中的message
- %l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
- %f 输出日志信息所属的类的类名
- %c 输出日志信息所属的类的全名
7、log4j.appender.I.Append = true
意思是在日志文件后追加。
三、关于log4j的应用,
1.得到记录器
使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:
public static Logger getLogger( String name)
通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:
static Logger logger = Logger.getLogger ( TestLog.class.getName () )
2.读取配置文件
当获得了日志记录器之后,第二步将配置Log4j环境.这里根据应用来配置加载log配置文件。
3、插入日志信息
就是在相应的业务逻辑处调用日志记录器,使用不同优先级别的日志记录语句插入到想记录日志的地方。
private static Logger logger = Logger.getLogger(TestLog.class); logger.debug ( Object message ) ; logger.info ( Object message ) ; logger.warn ( Object message ) ; logger.error ( Object message ) ;
具体使用方式比较简单,但是做好日志的记录方式,和打印内容还是很难的,好的日志记录,是对于排查系统的错误与异常很有帮助的。
要是打印的日志在系统出问题时帮不上任何忙,要它何用。
关于如何做好日志记录,我还任重道远,可以参考:http://www.cnblogs.com/rollenholt/p/5392338.html