首页 > 解决方案 > 如何更改slf4j logger的日志文件名

问题描述

我对更改 slf4j 记录器的日志文件的名称有疑问。在 logback.xml 文件中,这被设置为 myApp.log。我希望每次在 Java 中运行我的代码时都能够更改此文件名,其中文件名是我运行问题的设置的组合。正如你可以想象的那样,我宁愿在 Java 中有一些代码,而不是每次在 logback.xml 文件中手动更改它。

在 SLF4j 中从 Java 更改日志记录输出文件的名称

我已经在上面的链接中看到了线程,但这似乎对我有用。我目前实现如下

    /* Configure parameters */
    Properties properties = new Properties();
    Configuration.readFromFile(properties);
    properties.setProperty("MAXTHREADS", "1");
    properties.setProperty("EXPORT_MODEL", "false");
    properties.setProperty("log4j.appender.debugFile.File", "test.log");
    properties.setProperty("log4j.appender.infoFile.File", "test2.log");
    properties.setProperty("log4j.appender.warnFile.File", "test3.log");
    properties.setProperty("log4j.appender.errorFile.File", "test4.log");

如果我使用这些设置运行它,输出仍然保存在 myApp.log 中。

欢迎任何建议!

标签: javaoutputslf4j

解决方案


您可以使用筛选附加程序,然后

MDC.put("myRun", "runXXXX");

在运行您的代码之前。

在你的 logback.xml 中有这样的东西:

  <appender name="MapiContextSplit" class="ch.qos.logback.classic.sift.SiftingAppender">
    <discriminator>
      <key>myRun</key>
      <defaultValue>default</defaultValue>
    </discriminator>
    <sift>
      <appender name="FILE-${myRun}" class="ch.qos.logback.core.rolling.RollingFileAppender">
                 <file>/var/log/test-${myRun}.log</file>
      </appender>
    </sift>
  </appender>

推荐阅读