Log4j
是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
项目中日志功能十分强大,可以实时监控你的代码的运行情况,并且就像书页一样清晰可见。
环境
首先在pom.xml 配置好相关依赖,我这里只使用Log4j,当然还可以使用slf4j 可以管理,
1 | <log4j.version>1.2.16</log4j.version> |
在web.xml 监听 log4j.properties
1 | <!-- 启动Log4j --> |
配置log4j.properties 配置文件
1 | log4j.rootLogger=DEBUG, stdout , R |
说明
rootLogger
也可以写作rootCategory
,
rootLogger value的含义
第一个逗号前表示log的级别:FATAL
,ERROR
,WARN
,INFO
,DEBUG
,级别依次降低,开发的时候一般选作DEBUG,上线前期可以INFO或者DEBUG,版本稳定了可以WARN或者ERROR。稳定以后可以每天将日志发送到你的邮箱(至于怎么发,看最下面的Appender),这样就不需要每天去看检查上线的项目有没有异常。
第一个逗号后面的表示你定义的appender
,比如我们这里定义了stdout和R,这个名字可以随便定,和下面的对应就好了。这里的stdout代表控制台输出,上线的时候别忘记关掉,直接在rootLogger里去掉stdout就好了。
Log4j提供的appender有以下几种:
1 | org.apache.log4j.ConsoleAppender(控制台) |
log4j提供以下4种布局样式:
不同的Appender有不同的属性,但是Appender都会有一个属性layout,layout又有一个属性PatternLayout
1 | org.apache.log4j.HTMLLayout(以HTML表格形式布局) |
再看一下PatternLayout的值代表的什么意思
%d
输出日志时间点的日期或时间,紧跟一对花括号进行自定义格式%t
输出产生该日志事件的线程名%c
输出所属的类目,通常就是所在类的全名%l
输出行号%m
输出代码中指定的消息%n
输出一个回车换行符,Windows平台为 \r\n
,Unix平台为 \n
,也就是一跳消息占用一行,所以%m%n
基本都是一起用%p
输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
我们经常会看到[%-5p]这样的用法,就是对%p进行格式化,占用几个字符空间,因为INFO,DEBUG他们有的占用4个有的占用5个,日志看起来不对其,进行一个格式化而已。%r
输出自应用启动到输出该log信息耗费的毫秒数%c
输出所属的类目,通常就是所在类的全名%x
输出对齐
再看看appender的其他属性
1 | log4j.appender.FILE.File=D:/logs/log4j.log --------定义输出文件的位置及文件名 |
输出到邮件
1 | log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender(指定输出到邮件) |
我的项目最终配置
1 | # Rules reminder: |
测试
测试的类没有启动 web ,默认的是查找 resources 根目录下的 log4j.properties
,没有则找不到。
1 | package com.wuwii.test; |
运行代码后,我们可以看到控制台打印了:
因为我们设置了输入到控制台了,再去查看我们的打印日志文件的位置,也可以看到报错信息,使用的 是org.apache.log4j.DailyRollingFileAppender
,并没有 maxBackupIndex
和 maxFileSize
属性,所以上面的配置文件也不正确,需要删掉这两行,
使用的是每天生成一个文件,前一天的备份成yyyy-MM-dd
符合。
打开文件看到
正确写入,
Log4j的使用及配置就是这样的了。
参考博客 http://blog.csdn.net/zhengliusu/article/details/44619023