简体   繁体   English

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

[英]log4j Appender additivity for custom log level

I have a scenario where I have a separate custom level defined XYZLogLevel for logging and I have 2 rolling file appenders where 2nd appender is specifically reserved to log log messages from XYZLogLevel. 我有一种情况,我有一个单独的自定义级别定义用于日志记录的XYZLogLevel,并且有2个滚动文件附加程序,其中第2个附加程序专门保留用于记录来自XYZLogLevel的日志消息。 However the logs are going in both the files which is undesirable. 但是,日志将进入两个文件,这是不希望的。

Note:- 注意:-

  1. Logs are not package specific, so adding additivity for package wont work. 日志不是特定于软件包的,因此无法为软件包添加可加性。
  2. Everything has to be done through log4j.properties file. 一切都必须通过log4j.properties文件完成。

Adding LevelRangeFilter to first appender partially resolves it, but when I add 3rd appender for another custom level, then I again see duplication in 2nd and 3rd appender. 将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

Maybe this can be solved through org.apache.log4j.varia.DenyAllFilter but somehow I was not able to configure that for properties file. 也许可以通过org.apache.log4j.varia.DenyAllFilter解决,但是以某种方式我无法为属性文件配置它。 I believe that functionality is only for XML configuration. 我相信该功能仅适用于XML配置。

Its a very tricky sitution as I dont have the liberty to switch to XML configuration, any help on this would be appreciated guys. 这是一个非常棘手的情况,因为我没有自由切换到XML配置,对此提供的任何帮助将不胜感激。 Link and examples would be great as I understand them quickly. 链接和示例非常棒,因为我很快就会理解它们。

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.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%n 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