在 spring boot 中从代码自定义日志文件名

customize log file name from code in springboot

我有一个带有休息端点的简单 springboot 应用程序。我每次调用rest端点,它都会执行一定的activity。现在,所有日志记录信息都进入 wildfly 中的 server.log 文件。我想要一个场景,每次调用我的其余端点时我都可以自定义日志文件的名称。例如

从 A 点到 B 点的所有日志记录信息应转到名为 First.log 的文件,从 B 点到 C 点的所有日志记录信息应转到 Second.log

是否可以通过使用 logback 或 log4j2 实现这样的实现。我可以从代码中自定义日志文件的名称吗?我在其中指定从此时开始的每个日志记录信息都应该转到特定文件。

如果您使用的是 Log4j2,您可以在运行时使用 Configurator#reconfigure 重新配置它。

SpringBoot(cf.Github)使用的标准log4j2.xml文件使用Java系统属性LOG_FILE来存储日志文件的位置。因此你只需要:

  • 配置 Spring 启动以记录到文件(参见 documentation)。例如,您可以添加:

    logging.file.name = initial.log
    

    你的`application.properties,

  • 每当您想更改日志文件的名称时调用

    System.setProperty("LOG_FILE", "first.log");
    Configurator.reconfigure();
    

Log4j2 保证在重新配置期间不会丢失任何消息(旧文件在 新文件创建后 关闭)。

Logback 当然有类似的解决方案,但 Logback 在重新配置期间可能会丢失消息。