繁体   English   中英

log4j Appender可自定义日志级别的可加性

[英]log4j Appender additivity for custom log level

我有一种情况,我有一个单独的自定义级别定义用于日志记录的XYZLogLevel,并且有2个滚动文件附加程序,其中第2个附加程序专门保留用于记录来自XYZLogLevel的日志消息。 但是,日志将进入两个文件,这是不希望的。

注意:-

  1. 日志不是特定于软件包的,因此无法为软件包添加可加性。
  2. 一切都必须通过log4j.properties文件完成。

将LevelRangeFilter添加到第一个附加程序可以部分解决该问题,但是当我为另一个自定义级别添加第3个附加程序时,我再次在第2个和第3个附加程序中看到重复。

log4j.rootCategory=ERROR, F, XYZLOG, LMNLOG

log4j.appender.F=org.apache.log4j.RollingFileAppender
log4j.appender.F.File=f_log.log
log4j.appender.F.MaxFileSize=5MB
log4j.appender.F.MaxBackupIndex=10
log4j.appender.F.layout = org.apache.log4j.PatternLayout
log4j.appender.F.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %c{1} [%p] %m%n

log4j.appender.XYZLOG=org.apache.log4j.RollingFileAppender
log4j.appender.XYZLOG.File=xyz_reporting.log
log4j.appender.XYZLOG.threshold=XYZLOG#com.services.domain.xyzlogs.XYZLogLevel
log4j.appender.XYZLOG.filter.a=org.apache.log4j.varia.LevelMatchFilter    
log4j.appender.XYZLOG.filter.a.LevelToMatch=XYZLOG#com.services.domain.xyzlogs.XYZLogLevel
log4j.appender.XYZLOG.filter.a.AcceptOnMatch=true 
log4j.appender.XYZLOG.MaxFileSize=100KB
log4j.appender.XYZLOG.MaxBackupIndex=10
log4j.appender.XYZLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.XYZLOG.layout.ConversionPattern=%m%n

log4j.appender.LMNLOG=org.apache.log4j.RollingFileAppender
log4j.appender.LMNLOG.File=lmn_reporting.log
log4j.appender.LMNLOG.threshold=LMNLOG#com.services.domain.lmnlogs.LMNLogLevel
log4j.appender.LMNLOG.filter.a=org.apache.log4j.varia.LevelMatchFilter    
log4j.appender.LMNLOG.filter.a.LevelToMatch=LMNLOG#com.services.domain.lmnlogs.LMNLogLevel
log4j.appender.LMNLOG.filter.a.AcceptOnMatch=true 
log4j.appender.LMNLOG.MaxFileSize=100KB
log4j.appender.LMNLOG.MaxBackupIndex=10
log4j.appender.LMNLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.LMNLOG.layout.ConversionPattern=%m%n

也许可以通过org.apache.log4j.varia.DenyAllFilter解决,但是以某种方式我无法为属性文件配置它。 我相信该功能仅适用于XML配置。

这是一个非常棘手的情况,因为我没有自由切换到XML配置,对此提供的任何帮助将不胜感激。 链接和示例非常棒,因为我很快就会理解它们。

I am answering my own question.

First you need to create a logger and set additivity as FALSE.

log4j.logger.XZYLOG=XZYLOG#XYZLOG#com.services.domain.xyzlogs.XYZLogLevel, XYZAPPENDER

log4j.additivity.XZYLOG=false

log4j.logger.LMNLOG=LMNLOG#XYZLOG#com.services.domain.lmnlogs.LMNLogLevel, LMNAPPENDER

log4j.additivity.LMNLOG=false

Then configure the appenders in following way.

log4j.appender.XYZLOGAPPENDER=org.apache.log4j.RollingFileAppender
log4j.appender.XYZLOGAPPENDER.File=xyz_reporting.log
log4j.appender.XYZLOGAPPENDER.threshold=XYZLOG#com.services.domain.xyzlogs.XYZLogLevel
log4j.appender.XYZLOGAPPENDER.MaxFileSize=100KB
log4j.appender.XYZLOGAPPENDER.MaxBackupIndex=10
log4j.appender.XYZLOGAPPENDER.layout=org.apache.log4j.PatternLayout
log4j.appender.XYZLOGAPPENDER.layout.ConversionPattern=%m%n

log4j.appender.LMNLOGAPPENDER=org.apache.log4j.RollingFileAppender
log4j.appender.LMNLOGAPPENDER.File=lmn_reporting.log

log4j.appender.LMNLOGAPPENDER.threshold = LMNLOG#com.services.domain.lmnlogs.LMNLogLevel
log4j.appender.LMNLOGAPPENDER.MaxFileSize = 100KB log4j.appender.LMNLOGAPPENDER.MaxBackupIndex = 10 log4j.appender.LMNLOGAPPENDER.layout = org.apache.log4j.PatternLayout log4j.appender.LMNLOGAPPENDER.layout.ConversionPattern =%m%

You may or may not need the filter in this case.

Note: I cannot post company code here thats why I modified the solution.
This is to give you general idea how I have solved this problem.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM