log4j日誌按分模組和分級輸出到不同的檔案中去
阿新 • • 發佈:2019-02-03
現在遇到這樣一個場景:
輸出日誌,按照不同的模組,和級別 輸出到不同的檔案中。
現在有 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 -----------------------------------------------------------------資訊");
大功告成: