Log4j按级别输出到不同文件
log4j.properties 文件:
log4j.logger.net.sf.hibernate.cache=debug
log4j.rootLogger = error,portal_log,shop_log
log4j.appender.ROLLING_FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ROLLING_FILE.File=/logs/PT.log
log4j.appender.ROLLING_FILE.DatePattern='.'yyyy-MM-dd'.log'
#log4j.appender.ROLLING_FILE.Append=true
#log4j.appender.ROLLING_FILE.MaxFileSize=50MB
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
log4j.logger.portal_log=INFO, portal_log
log4j.appender.portal_log=com.aisino.global.context.common.logs.MyAppender
log4j.appender.portal_log.Append=true
log4j.appender.portal_log.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.portal_log.File=/logs/portal_log.log
log4j.appender.portal_log.Threshold=INFO
log4j.appender.portal_log.layout=org.apache.log4j.PatternLayout
log4j.appender.portal_log.layout.ConversionPattern=%m%n
log4j.additivity.portal_log=false
log4j.logger.shop_log=INFO, shop_log
log4j.appender.shop_log=com.aisino.global.context.common.logs.MyAppender
log4j.appender.shop_log.Append=true
log4j.appender.shop_log.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.shop_log.File=/logs/shop_log.log
log4j.appender.shop_log.Threshold=INFO
log4j.appender.shop_log.layout=org.apache.log4j.PatternLayout
log4j.appender.shop_log.layout.ConversionPattern=%m%n
log4j.additivity.shop_log=false
配置中关键的配置说明是这一句:
log4j.appender.debug.Threshold = INFO
而它的作用是输出INFO级别以上的内容到日志文件中,所以以上pt.log,shop_log.log,portal_log .log文件中都会包含了ERROR级别的文件。
这就比较烦,得到了我所不要想要的日志信息!!!!!
解决办法是:定义自己的Appender类,继承DailyRollingFileAppender,改写针对Threshold 的设置说明(重写针对级别的比较方法)
源代码:
- public boolean isAsSevereAsThreshold(Priority priority) {
- return threshold == null || priority.isGreaterOrEqual(threshold);
- }
重写 isAsSevereAsThreshold(Priority priority)方法:
- public class MyAppender extends DailyRollingFileAppender {
- @Override
- public boolean isAsSevereAsThreshold(Priority priority) {
- //只判断是否相等,而不判断优先级
- return this.getThreshold().equals(priority);
- }
- }
这样,进行唯一判断,只有当Threshold与priority一致时,才进行输出,就实现了真正Log4j按照级别输出日志文件。
备份,仅供参考!!!
最新文章
- Javascript:JSON总结
- js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版【转】
- 【C#】VS2015开发环境的安装和配置(三)2016-08-03更新
- 移动web开发介绍——浏览器
- 01C语言基础知识
- iOS -类目,延展,协议
- CodeForces 527B Error Correct System
- Java Lock
- C++之友元函数
- Python3.X与urllib
- 华为手机root 删除一般不用软件 的命令
- Effective C++_笔记_条款09_绝不在构造和析构过程中调用virtual函数
- sphinx set several dates as filter
- javascript类的继承
- 做事从来不坚持的我又开始学习PyQt了。。。。。。
- codis3.2安装报错dashboard.go:369: [PANIC] call rpc create-proxy to dashboard 127.0.0.1:18080 failed的处理
- C语言学习及应用笔记之一:C运算符优先级及使用问题
- 【转】PropertyGrid控件中的多级显示
- ASP.NET Response.Redirect 丢失 Session的问题(作废,仅供参考)
- android模拟器修改时间