【问题标题】:Spring Boot - Log4j2 - 2 files are generatedSpring Boot - Log4j2 - 生成2个文件
【发布时间】:2015-06-26 15:06:32
【问题描述】:

我正在使用 Log4j2 和 Spring Boot (1.2.4)。按照文档(以及 spring-boot.jar 中的 log4j2-file.xml 作为示例),这是我的配置

<?xml version="1.0" encoding="UTF-8"?>
 <Configuration>
  <Appenders>
    <File name="Logs" fileName="${sys:LOG_FILE}" append="false">
    ...

<Logger level="warn">
      <AppenderRef ref="Logs"/>
 </Logger>

在 application.properties 文件中: 日志记录文件:/var/tmp/logs/mylog.log

结果生成了2个文件:

  • 一个名为 ${sys:LOG_FILE} 的文件仍然为空
  • 一个文件 /var/tmp/logs/mylog.log 正确填写

我不明白为什么会生成文件${sys:LOG_FILE}

有什么想法吗? 非常感谢。

【问题讨论】:

    标签: spring-boot log4j2


    【解决方案1】:

    我正在使用 Spring Boot 的 1.2.5.RELEASE 版本(包括 starter 父级),我遇到了同样的问题。

    我的假设是 Log4j2 在 Spring Boot 加载配置之前尝试初始化文件,导致一个名为 ${sys:LOG_FILE} 或 ${sys 的空文件(在 Windows 上)。

    避免这种情况的一种方法是仅设置系统属性 (-DLOG_FILE=/var/tmp/logs/mylog.log) 并从配置中删除 logger.file。

    【讨论】:

    • 感谢您的回答。我已经让 log4j2 使用 logback,它很好地集成在 spring boot 中。
    【解决方案2】:

    logging.file 仅用于 spring 配置的默认记录器。
    在这种情况下,您的 LOG_FILE 必须在执行 jar 之前通过 -DLOG_FILE=/location/of/log.file 传递给系统变量

    【讨论】:

      【解决方案3】:

      似乎加载了 log4j2.xml 并在加载 application.properties 之前创建了日志文件。解决此问题的一种方法是将 log4j2.xml 的名称更改为其他名称,例如 log4j2-example.xml 以显示自动加载,然后将以下行添加到 application.properties:

      logging.config=classpath:log4j2-example.xml
      

      这将确保在创建记录器之前加载 LOG_PATH。

      【讨论】:

        猜你喜欢
        • 2016-08-13
        • 1970-01-01
        • 2022-01-19
        • 2019-04-01
        • 2017-06-14
        • 1970-01-01
        • 1970-01-01
        • 2021-06-22
        • 2019-08-31
        相关资源
        最近更新 更多