首页 / XML / log4j.xml的实用例子
log4j.xml的实用例子
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了log4j.xml的实用例子,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5641字,纯文字阅读大概需要9分钟。
内容图文
![log4j.xml的实用例子](/upload/InfoBanner/zyjiaocheng/1320/9f1c439ed6f4447981b750794e73f329.jpg)
大多数讲log4j配置的教程用的都是log4j.properties文件,我觉得xml或许更好一点,在这里我提供一个我已经用于生产环境的log4j.xml的例子,先上代码,然后再解释:
<? xml version="1.0" encoding="UTF-8" ?> <! DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd" > < log4j:configuration > <!-- 输出到控制台 --> < appender name ="consoleAppender" class ="org.apache.log4j.ConsoleAppender" > < param name ="Threshold" value ="DEBUG" /> < layout class ="org.apache.log4j.PatternLayout" > < param name ="ConversionPattern" value ="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" /> </ layout > </ appender > <!-- 输出到文件(info) --> <!-- 将生成“info.log.2014-06-11”这样的日志文件 --> < appender name ="fileAppenderInfo" class ="org.apache.log4j.DailyRollingFileAppender" > < param name ="File" value ="${user.home}/logs/website/info.log" /> < param name ="DatePattern" value =".yyyy-MM-dd" /> < layout class ="org.apache.log4j.PatternLayout" > < param name ="ConversionPattern" value ="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" /> </ layout > < filter class ="org.apache.log4j.varia.LevelRangeFilter" > < param name ="LevelMin" value ="INFO" /> < param name ="LevelMax" value ="INFO" /> </ filter > </ appender > <!-- 输出到文件(warn) --> < appender name ="fileAppenderWarn" class ="org.apache.log4j.DailyRollingFileAppender" > < param name ="File" value ="${user.home}/logs/website/warn.log" /> < param name ="DatePattern" value =".yyyy-MM-dd" /> < layout class ="org.apache.log4j.PatternLayout" > < param name ="ConversionPattern" value ="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" /> </ layout > < filter class ="org.apache.log4j.varia.LevelRangeFilter" > < param name ="LevelMin" value ="WARN" /> < param name ="LevelMax" value ="WARN" /> </ filter > </ appender > <!-- 输出到文件(error) --> < appender name ="fileAppenderError" class ="org.apache.log4j.DailyRollingFileAppender" > < param name ="File" value ="${user.home}/logs/website/error.log" /> < param name ="DatePattern" value =".yyyy-MM-dd" /> < layout class ="org.apache.log4j.PatternLayout" > < param name ="ConversionPattern" value ="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" /> </ layout > < filter class ="org.apache.log4j.varia.LevelRangeFilter" > < param name ="LevelMin" value ="ERROR" /> < param name ="LevelMax" value ="ERROR" /> </ filter > </ appender > <!-- 屏蔽所有org.springframework.*输出的Debug(及以下)信息 --> < logger name ="org.springframework" > < level value ="INFO" ></ level > </ logger > < root > < level value ="ALL" /> < appender-ref ref ="consoleAppender" /> < appender-ref ref ="fileAppenderInfo" /> < appender-ref ref ="fileAppenderWarn" /> < appender-ref ref ="fileAppenderError" /> </ root > </ log4j:configuration >
log4j简单地说,由3个东西组成:
- 一个叫“logger”,是我们的程序直接使用的东西,log4j高明之处就在于它的logger可以有继承关系,下面我会稍微用到一点这个功能;
- 一个叫“appender”,负责管日志到底输出到哪里去,目前对我们而言输出日志最多的两个地方,一是控制台,另一当然是文件;
- 一个叫“layout”,也就是日志输出的格式定义。
你可以定义一个layout,给一些appender使用,再定义几个logger,使用不同的appender,总之很灵活,而我用的功能则很简单:
- 对于info、warning和error这几种错误,都需要输出到文件去,而且是不同的文件
- 自动按天新建文件,避免单个日志文件过大
- debug信息不需要输出到文件,只需要在控制台中显示
- spring框架输出的debug信息太多,要屏蔽
我针对info,warning,error定义了3个appender,这3个appender的类型都是“DailyRollingFileAppender”,是log4j直接提供的,能够按天新建日志文件,这些日志文件的存放位置在用户的home目录的log/website子目录下,为什么不存在程序当前的目录?因为程序我经常要更新,一不小心就把log目录删掉了,当然你也可以存到别的地方去,比如上级目录,前提是要有写入权限。另外还有一个appender是用于输出到控制台的,类型是“ConsoleAppender”,此类型也是log4j提供的。一共4个appender。
我的layout使用了“PatternLayout”,也是log4j提供的,这种layout可以自己定义一个输出模板,我的输出模板是“[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n”,会生成这样的输出格式:
[ 15:22:15:131 ] [ DEBUG ] - com.ignet.website.ui.controller.HomeController.exceptionTest(HomeController.java:19) - test output format [15:22:15:140][ERROR] - com.ignet.website.ui.resolver.SimpleLoggingExceptionResolver.resolveException(SimpleLoggingExceptionResolver.java:26) - 未考虑到的异常发生,请注意排查
对一般的项目来说,足够了。需要更丰富的信息的话就自己写在日志内容里吧。
而对于logger,我只定义了两个,一个是root,这个是所有logger的“祖先”,这个logger包含了前面定义的4个appender,这意味则什么呢?意味着所有的日志,都会尝试调用这4个appender去记录。那问题来了,假如我一个要log一个warning信息,那么岂不是3个日志文件中都有这个信息?——放心,仔细看,我在appender中设置了过滤,看一看你就明白了。
一切安好,除了运行时候发觉spring框架输出的废话实在太多,那些debug信息对我们来说没什么用,我们又不打算修改spring的代码,于是我定义了另一个logger,名字叫“org.springframework”,所有“org.springframework”命名空间下的类,都会使用这个logger,我给这个logger设置了一个level,为info,debug比info低,所以从此以后spring的那些debug信息就不来烦我了。“org.springframework”这个logger是root logger的孩子,所以理所当然地“继承了”4个appender,不需要再写了吧?
这里稍微提一下,为啥spring框架这么聪明,会自动使用我们另外加上去的log4j?其实spring是用了一个叫“commons-logging”的库,这玩意儿能自动检测各大logging framework并使用,很牛逼就是。
最后生成的日志文件大致是这样的,大家感受下:
error.log error.log.2014-08-13 info.log.2014-07-23 info.log.2014-08-04 info.log.2014-08-14 error.log.2014-07-11 info.log info.log.2014-07-24 info.log.2014-08-05 info.log.2014-08-15 error.log.2014-07-18 info.log.2014-07-11 info.log.2014-07-25 info.log.2014-08-06 info.log.2014-08-19 error.log.2014-07-22 info.log.2014-07-17 info.log.2014-07-28 info.log.2014-08-07 info.log.2014-08-20 error.log.2014-08-04 info.log.2014-07-18 info.log.2014-07-29 info.log.2014-08-08 info.log.2014-08-21 error.log.2014-08-05 info.log.2014-07-19 info.log.2014-07-30 info.log.2014-08-09 info.log.2014-08-22 error.log.2014-08-07 info.log.2014-07-21 info.log.2014-07-31 info.log.2014-08-11 warn.log error.log.2014-08-11 info.log.2014-07-22 info.log.2014-08-01 info.log.2014-08-13 warn.log.2014-07-11
日积月累,日志文件越来越多,咋办?教大家个秘籍,在这个日志目录的上两层目录写个脚本:
find ./logs/website -ctime +10 -exec rm {} \;
执行这个脚本,就能删除掉10天以前的过期日志。
原文:http://www.cnblogs.com/guogangj/p/3931397.html
内容总结
以上是互联网集市为您收集整理的log4j.xml的实用例子全部内容,希望文章能够帮你解决log4j.xml的实用例子所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。