Java 如何使用自定义log4j.properties文件进行私有日志记录?

Java 如何使用自定义log4j.properties文件进行私有日志记录?,java,logging,log4j,Java,Logging,Log4j,我需要定期将文本消息附加到文本文件中,我想借助log4j使生活变得简单。因此,我创建了一个带有DailyRollingFileAppender的“mylog.properties”文件——没什么不寻常的——并将该文件放在我的src/java/resources目录中。现在,我准备从这个文件创建一个记录器,并开始使用它进行日志记录,如下所示: class MyClass { private static final Logger myLog = getLoggerConfiguredFro

我需要定期将文本消息附加到文本文件中,我想借助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);
    }    
}
那么,从PropertiesFile配置getLoggerConfiguredFromPropertiesFile的逻辑是什么呢

谢谢, 阿尔瓦罗做:

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


我们应该完成这项工作
log4j
自动查找与类最接近的
log4j.properties
,如果项目中只有一个属性,那么就是该属性。另外,调用您的文件
log4j.properties
,而不是
mylog.properties

我想出了一个解决方法,在这里我使用了常规记录器:

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

在log4j.properties中,我配置了一个仅适用于我的类的自定义DailRollingFileAppender,如前所述。

log4j使用全局数据。一个应用程序中不能有多个Log4j实例(如果不使用多个类加载器,这就太过分了)。按照预期的方式使用Log4j,或者使用其他东西。我明白了,所以问题是Log4j有静态数据。这太糟糕了,因为我真的可以使用DailyRollingFileAppender的功能。谢谢,但我感兴趣的解决方案是一个记录器的本地实例,我可以配置它自己的属性文件,并且只在那里使用。应用程序的其余部分将像往常一样使用全局记录器。显然,Log4j:-(@alvaronendez)是不可行的,但不是你说的方式。唯一的Log4j配置文件(
Log4j.properties
)可以将
MyClass
记录器中的所有日志项发送到另一个文件,这样当
MyClass
记录消息时,它只会被记录到备用文件中(使用
dailrollingfileappender
),而不是在主日志文件中。您可以通过将“additivity”设置为false来实现。请参阅问题: