【问题标题】:log4j Appender additivity for custom log level自定义日志级别的 log4j Appender 可加性
【发布时间】:2016-04-21 17:22:47
【问题描述】:

我有一个场景,我有一个单独的自定义级别定义 XYZLogLevel 用于日志记录,并且我有 2 个滚动文件附加程序,其中第二个附加程序专门保留用于记录来自 XYZLogLevel 的日志消息。然而,这两个文件中的日志都是不可取的。

注意:-

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

将 LevelRangeFilter 添加到第一个 appender 可以部分解决它,但是 当我为另一个自定义级别添加第三个附加程序时,我再次看到 第二个和第三个附加程序中的重复。

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 配置,任何对此的帮助将不胜感激。 链接和示例会很棒,因为我很快就能理解它们。

【问题讨论】:

    标签: java logging


    【解决方案1】:
    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%n

    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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      • 2018-07-10
      • 2012-08-18
      • 2018-11-21
      • 1970-01-01
      相关资源
      最近更新 更多