【问题标题】:How to use custom log4j.properties file for private logging?如何使用自定义 log4j.properties 文件进行私人日志记录?
【发布时间】:2017-04-12 23:45:51
【问题描述】:

我需要定期将文本消息附加到文本文件中,并且我想搭载 log4j 以简化生活。所以我创建了一个带有 DailyRollingFileAppender 的“mylog.properties”文件——没有什么不寻常的——我把那个文件放在我的 src/java/resources 目录中。所以现在我已经准备好从这个文件创建一个记录器并开始使用它进行记录,如下所示:

class MyClass {
    private static final Logger myLog = getLoggerConfiguredFromPropertiesFile("mylog.properties");

    public void logSomething(String message) {
      myLog.info(message);
    }    
}

那么 getLoggerConfiguredFromPropertiesFile 的逻辑是什么?

谢谢, 阿尔瓦罗

【问题讨论】:

  • Log4j 使用全局数据。您不能在应用程序中拥有多个 Log4j 实例(不使用多个类加载器,这完全是矫枉过正)。以预期的方式使用 Log4j,或使用其他方式。
  • 我明白了,所以问题是 Log4j 有静态数据。这太糟糕了,因为我真的可以使用 DailyRollingFileAppender 的功能。

标签: java logging log4j


【解决方案1】:

在做:

private static final Logger myLog = Logger.getLogger(MyClass.class)

应该完成工作。 log4j 自动寻找最接近班级的log4j.properties,如果项目中只有一个,那就是那个。另外,请将您的文件称为log4j.properties,而不是mylog.properties

【讨论】:

  • 谢谢,但我感兴趣的解决方案是一个记录器的本地实例,我可以使用它自己的属性文件进行配置并仅在那里使用。应用程序的其余部分将像往常一样使用全局记录器。显然,使用 Log4j 是不可行的 :-(.
  • @AlvaroMendez 这是可行的,但不是你说的那样。唯一的 log4j 配置文件 (log4j.properties) 可以将所有日志条目从 MyClass 记录器发送到另一个文件,这样当 MyClass 记录一条消息时,它只会记录在备用文件中(使用 @ 987654330@),而不是在主日志文件中。您可以通过将“可加性”设置为 false 来做到这一点。见问题:Log4j config - different logs to different files
【解决方案2】:

我想出了一个使用常规记录器的解决方法:

private static final Logger myLog = LoggerFactory.getLogger(MyClass.class);

在 log4j.properties 中,我配置了一个仅适用于我的班级的自定义 DailyRollingFileAppender,如 here 所述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2013-11-28
    • 1970-01-01
    • 2014-12-03
    • 2018-11-16
    • 2016-04-23
    • 1970-01-01
    相关资源
    最近更新 更多