1. 程式人生 > >log4j日誌按分模組和分級輸出到不同的檔案中去

log4j日誌按分模組和分級輸出到不同的檔案中去

現在遇到這樣一個場景:

輸出日誌,按照不同的模組,和級別 輸出到不同的檔案中。
現在有  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.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.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.MyDailyRollingFileAppender log4j.appender.coreError.File = d:/zq/logs/core/error/error.log log4j.appender.coreError.layout = org.apache.log4j.PatternLayout log4j.appender.coreError.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n log4j.appender.coreError.Threshold = ERROR log4j.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,webInfo log4j.appender.webInfo = org.zq.core.common.util.log.MyDailyRollingFileAppender log4j.appender.webInfo.File = d:/zq/logs/web/info/info.log log4j.appender.webInfo.layout = org.apache.log4j.PatternLayout log4j.appender.webInfo.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n log4j.appender.webInfo.Threshold = INFO log4j.additivity.webInfo=false ## web error 日誌## log4j.logger.webError = error,webError log4j.appender.webError = org.zq.core.common.util.log.MyDailyRollingFileAppender log4j.appender.webError.File = d:/zq/logs/web/error/error.log log4j.appender.webError.layout = org.apache.log4j.PatternLayout log4j.appender.webError.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n log4j.appender.webError.Threshold = ERROR log4j.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  -----------------------------------------------------------------資訊");

大功告成:
這裡寫圖片描述