java - Log4J 动态配置

标签 java logging dynamic log4j

有什么方法可以动态配置 log4j 记录器。我希望一个类的每个实例都写入不同的文件(基于实例之间唯一的某些属性)。我想从 XML 配置中配置除文件之外的所有内容,然后为每个实例设置文件。

有没有办法使用 log4j 来做到这一点?

最佳答案

好的,根据您的评论,这是我会尝试的。

我想您会在应用程序开始时创建 10 个实例。!?无论如何。

在您的 log4j.xml 中,定义 10 个 name = yourUniqueId 的 appender(这个唯一的 id 将被硬编码)

让这些 appender 写入 yourUniqueid.log

<logger name="yourUniqueId" additivity="false">
    <level value="INFO" />
    <appender-ref ref="fileAppender" />
</logger>

<appender name="fileAppender" class="org.apache.log4j.FileAppender">
<param name="File" value="/path/yourfile.log"/>

    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{dd MM yyyy HH:mm:ss,SSS} %m%n"/>
    </layout>
</appender>

然后在您的对象构造函数中,使用对象唯一 ID 实例化正确的 Logger。

类似的东西:

public MyClassContructor(){
     String uniqueId = getMyUniqueIdFromSomewhere();
     logger = Logger.getLogger(uniqueId);
} 

我认为你不想乱用 log4j.xml,那么你将不得不使用 log4j API 并根据你的唯一 id 创建你自己的 appender

像这样:

public class YourClass{
Logger logger = Logger.getLogger(YourClass.class);
SimpleLayout layout = new SimpleLayout();
FileAppender appender = null;

public YourClass() {
    try {
        appender = new FileAppender(layout, "/path/tolog/yourUniqueId.log", false);
        logger.addAppender(appender);

        logger.setLevel((Level) Level.DEBUG);

    }
    catch(IOException e) {
        e.printStackTrace();
        logger.error("Printing ERROR Statements",e);
    }
}

这样 YourClass 的每个实例都会写入不同的日志文件。您所要做的就是在调用构造函数时想出一种获取此 uniqueId 的方法。

希望对您有所帮助。

关于java - Log4J 动态配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6998323/

相关文章:

java - 如何忽略特定字符集之间的所有字符?

java - 从 pfx 文件生成的 JAVA jks keystore 问题

java - 如何从 SAX-Parser 获取所有验证错误?

java - Log4j 配置 - 不同文件的不同日志

linux - 如何配置php5-fpm.log的logrotate?

c - 如何在 C 中将 realloc 与双字符指针一起使用?

Java同步问题

java - slf4j 日志记录 - MDC.put 函数不打印任何内容

django基于外键的动态表单值

c++ - 斐波那契数列 - 动态数组