在项目中的应用见: https://github.com/ygj0930/CoupleSpace
在我们的项目运行过程中,偶尔会有预料不到的异常发生。如果能在发生异常时把异常的详细情况,比如什么时候在哪一行代码发生了什么异常,严重级别是多少之类的信息记录下来,那么我们就可以在维护时根据这个记录异常的文件针对性地去修复这些异常了。log4j为我们解决了这个问题。
log4j是apache提供给我们的一个处理异常的插件,利用它,我们可以在某些可能出现运行错误的地方用代码做好处理异常的准备。比如:把异常信息在控制台打印出来并把异常以某种易解读的格式保存在一个运行日志文件里。下面,我们来看一下log4j的具体用法。
一:下载log4j插件的jar包
下载地址:http://logging.apache.org/log4j/1.2/download.html
解压后,得到log4j和commons-logging两个jar包,并把上面两个jar包添加到项目里。
二:定制配置信息。
log4j是通过logger对象来处理异常信息的,而关于logger对象的一系列定义却是通过配置文件来实现的。
我们在src目录下新建一个properties文件,如:log4j.properties
然后,我们在该配置文件里进行logger对象的定义。主要有两部分:
1:配置根logger对象
log4j.rootLogger = 【级别】,appender1,appender2,appender3......
级别主要有4个,分别为:ERROR>WARN>INFO>DEBUG。这里的级别决定了程序运行时出现的错误会不会被这里定义的appender处理,只有当出现的错误等级大于等于appender的级别时才会被打印以及写入日志文件。
rootLogger可以配置多个appender,每个appender负责把异常记录作不同处理,比如:appender1把异常记录打印到控制台,appender2把记录写入日志文件...
2:对每个appender对象进行进一步的配置
log4j.appender.appenderName =具体是哪种appender//配置appender的具体信息,比如:异常输出到哪个文件、异常信息的保存格式...
log4j.appender.appenderName.option1 =value1
…
log4j.appender.appenderName.option= valueN
Log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(输出到控制台),
org.apache.log4j.FileAppender(输出到文件),
org.apache.log4j.DailyRollingFileAppender(输出到每天产生的一个日志文件),
org.apache.log4j.RollingFileAppender(输出到文件大小到达指定尺寸的时候产生一个新的文件的日志文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
每个appender主要需要配置的option有好很多,比如:layout、file、MaxFileSize、Append等,具体那些选项要配置因appender对象的种类而定。
比如,DailyRollingFileAppender需要配置DatePattern项来指定生成日志文件的频率:
log4j提供了几种异常信息的格式,主要有:
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
其中,常用的是PatternLayout,我们可以灵活地指定异常信息的打印、保存格式。打印参数如下:
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“rn”,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)
例如:log4j.appender.appender1.layout.PatternLayout=d%-m%n% ,则异常打印的格式为 时间-异常信息文字+换行
三:在项目中通过logger对象处理异常
1:创建Logger对象
Logger logger=Logger.getLogger(getClass().getName());
2:在可能出现异常的地方通过以下方法打印、输出日志记录到文件
logger.debug ("message")/ logger.debug ("message",exception)
logger.info ("message")/ logger.info ("message",exception)logger.warn ("message")/ logger.warn ("message",exception)logger.error ("message")/ logger.error ("message",exception)
各个appender会根据自身的级别与上面语句插入的记录的级别比较,小于等于时就会处理该记录,输出到控制台或到日志文件。
四:查看日志
在项目运行的web服务器的bin目录下找到配置appender时 log4j.appender.File=fileName 项的fileName文件,即为项目运行时的被写入的异常记录。