log4j日志按分模块和分级输出到不同的文件中去

来源:互联网 发布:大数据分析的目标市场 编辑:程序博客网 时间:2024/06/01 10:35

现在遇到这样一个场景:

输出日志,按照不同的模块,和级别 输出到不同的文件中。现在有  org.zq.core  和 org.zq.web 包下需要将 info 和 error 分别输出到文件中,也就是说,需要输出到4个文件中。以下为配置文件;`实现思路:`分包:应该叫 log4j 的过滤功能,先过滤 log4j.logger.org.zq.core = xxx  ,分级:然后使用 自定义的 appender 来改变log4j的层级范围判定 

自定义appender

package org.zq.core.common.util.log;import org.apache.log4j.DailyRollingFileAppender;import org.apache.log4j.Priority;/** * Created by zhuqiang on 2015/5/12. */public class MyDailyRollingFileAppender extends DailyRollingFileAppender {    @Override    public boolean isAsSevereAsThreshold(Priority priority) {        //只判断相同的范围(层级)        return this.getThreshold().equals(priority);    }}

log4j.properties

### set log levels ###log4j.rootLogger = info,stdout### 输出到控制台 ###log4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{1}:%L - %m%n#配置org.zq.core该包下的appender:日志级别为:info,error,并且引用两个 appender#log4j.logger.org.zq.core = info,error,coreInfo,coreError## core info 日志:info 的日志输出到指定的一个目录##log4j.appender.coreInfo = org.zq.core.common.util.log.MyDailyRollingFileAppender  #使用自定义的appender,改变Threshold的比较规则,只返回相同的。覆写原生的级别层级范围#log4j.appender.coreInfo.File = d:/zq/logs/core/info/info.log  #输出文件地址#log4j.appender.coreInfo.layout = org.apache.log4j.PatternLayout  #布局样式#log4j.appender.coreInfo.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n  #布局模版#log4j.appender.coreInfo.Threshold = INFO #这里一定要添加该属性,否则自定义appender中抛出空指针#log4j.additivity.coreInfo=false  ## core error 日志:只拦截error错误信息,并且输出到指定的文件中##log4j.appender.coreError = org.zq.core.common.util.log.MyDailyRollingFileAppenderlog4j.appender.coreError.File = d:/zq/logs/core/error/error.loglog4j.appender.coreError.layout = org.apache.log4j.PatternLayoutlog4j.appender.coreError.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%nlog4j.appender.coreError.Threshold = ERRORlog4j.additivity.coreError=false##########################################################################################################配置org.zq.web该包下的appender:日志级别为:info,error,并且引用两个 appender#log4j.logger.org.zq.web = info,error,webInfo,webError## web info 日志##log4j.logger.webInfo = info,webInfolog4j.appender.webInfo = org.zq.core.common.util.log.MyDailyRollingFileAppenderlog4j.appender.webInfo.File = d:/zq/logs/web/info/info.loglog4j.appender.webInfo.layout = org.apache.log4j.PatternLayoutlog4j.appender.webInfo.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%nlog4j.appender.webInfo.Threshold = INFOlog4j.additivity.webInfo=false## web error 日志##log4j.logger.webError = error,webErrorlog4j.appender.webError = org.zq.core.common.util.log.MyDailyRollingFileAppenderlog4j.appender.webError.File = d:/zq/logs/web/error/error.loglog4j.appender.webError.layout = org.apache.log4j.PatternLayoutlog4j.appender.webError.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%nlog4j.appender.webError.Threshold = ERRORlog4j.additivity.webError=false

测试代码

        //this 在web模块下        Logger l = Logger.getLogger(this.getClass());        l.info("webInfo-------------------- 信息");        l.error("webError-------------- 信息");        //用core模块中的类来获取log对象        Logger core = Logger.getLogger(new org.zq.core.Test().getClass());        core.info("coreInfo -----------------------------------------------------------------信息");        core.error("coreError  -----------------------------------------------------------------信息");

大功告成:
这里写图片描述

0 0