【问题标题】:Log4j selective appenderLog4j 选择性附加器
【发布时间】:2016-04-28 18:04:36
【问题描述】:

我有一个 java 应用程序,它有 'hypoteticly 说' 3 个对象... Animal 类的 1 个,Food 类的 1 个,它们与任何继承或接口无关..以及 class Manager 的最后一个 strong> 有一份动物清单和食物清单,经理负责那些动物和食物所在的动物园。

重点...

我正在使用 log4j,我需要仅在且仅当动物列表中的某些内容发生更改时才登录到 txt 文件...(动物死亡、出生或其他任何情况...)和我需要在且仅当食物列表中的某些内容发生变化时登录 System.out...(需要新的食物,吃过的食物,等等...)

我的问题:

如何使用 log4j 做到这一点?

我在这里找到: Log4j : Creating/Modifying appenders at runtime, log file recreated and not appended

类似于动态更改附加程序

String targetLog="where ever you want your log"
FileAppender apndr = new FileAppender(new PatternLayout("%d %-5p [%c{1}] %m%n"),targetLog,true);    
logger.addAppender(apndr);
logger.setLevel((Level) Level.ALL);

但我认为这非常难看并且容易出错,在整个洞应用程序中不断添加和删除附加程序..

有没有更好的方法来处理这个问题 我可以有 2 个记录器(一个用于动物 1 个用于食物)吗?

有什么建议吗??

谢谢

【问题讨论】:

    标签: java log4j


    【解决方案1】:

    您可以通过 log4j.xml 文件中的配置严格执行此操作。您可以在其中定义两个附加程序,然后有两个记录器元素,一个将动物与第一个附加程序联系起来,一个将食物与另一个附加程序联系起来。可能你也应该有一个元素来定义默认行为。

    【讨论】:

      【解决方案2】:

      这就是我让它工作的方式:

      配置属性

      log4j.rootLogger=TRACE, stdout
      
      log4j.appender.stdout=org.apache.log4j.ConsoleAppender
      log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
      log4j.appender.stdout.layout.ConversionPattern=%d [%5F:%t:%L] - %m%n
      
      log4j.appender.animalLogger=org.apache.log4j.FileAppender
      log4j.appender.animalLogger.File=animal.log
      log4j.appender.animalLogger.layout=org.apache.log4j.PatternLayout
      log4j.appender.animalLogger.layout.ConversionPattern=%d [%5F:%t:%L] - %m%n
      
      log4j.category.animalLogger=DEBUG, animalLogger
      log4j.additivity.animalLogger=false
      
      log4j.category.foodlLogger=DEBUG, stdout
      log4j.additivity.foodlLogger=false
      
      static final Logger animalLogger = Logger.getLogger("animalLogger");
      static final Logger foodlLogger = Logger.getLogger("foodlLogger");
      

      并加载记录器和日志记录:

      public static void main(String[] args) {
          PropertyConfigurator.configure("log4j.properties");
          animalLogger.debug("Hello animalLogger message");   
          foodlLogger.debug("Hello reportsLog message");
      } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-02
        • 2020-11-13
        • 1970-01-01
        • 2013-11-11
        • 1970-01-01
        • 1970-01-01
        • 2021-01-22
        相关资源
        最近更新 更多