【问题标题】:Spring Boot logging : use of system variables in log4j2.xmlSpring Boot 日志记录:在 log4j2.xml 中使用系统变量
【发布时间】:2017-08-08 11:55:59
【问题描述】:

我正在将 Spring Boot 应用程序作为 jar 运行。

java -Dlogs.location=<path/to/my/logs> -jar my-app.jar
or 
java -Dlogs.location=<path/to/my/logs> -jar my-app.jar --logs.location=<path/to/my/logs>

这里是一个示例 log4j2.xml 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<Configuration >
    <Properties>
        <Property name="base.log.dir">${sys:logs.location}</Property>
    </Properties>
....
</Configuration>

Spring boot 应用正在创建 ${sys:logs.location} 文件夹,而不是从 jvm args 正确解析系统属性。

相同的配置文件在 Spring 应用程序中运行良好。 我无法使用我的自定义 log4j2.xml 文件配置 logs.location。任何帮助或建议表示赞赏。

请参考sample project on github

我正在使用log4j2-spring.xml配置log4j2。

我看过StackOverflow q's。这个答案读取属性包。但我想读 sys 属性

【问题讨论】:

  • 尝试将log4j2.xml重命名为log4j2-spring.xml。根据文档,如果您使用的是标准弹簧,则无法完全控制它docs.spring.io/spring-boot/docs/current/reference/html/…
  • 您好,Oleksandr,感谢您的评论。我已经尝试过 log4j2.xml 和 log4j2-spring.xml 两者。我在 q's 中添加了我的 github 链接。请看一看。
  • 这个问题已经在这里回答了stackoverflow.com/a/14877698/5055762
  • BTW java 选项 -Dlogs.location= 必须在 -jar 选项之前 - -jar .jar 之后的所有内容都将被视为应用程序参数,而不是java 选项 - 因此改用 java -Dlogs.location= -jar my-app.jar

标签: spring-boot log4j2


【解决方案1】:

定义一个类似的属性

<Properties>
    <Property name="filePathVar"> ${sys:filepath:-/logs/app.log} </Property>
</Properties>

并在您的 xml 文件中使用 filePathVar,如 "${filePathVar}" 并将其用于运行时参数 - https://stackoverflow.com/a/37439625/5055762

注意 - 如果没有作为运行时参数传递,/logs/app.log 将是默认值

【讨论】:

  • 是的,我就是这样解决的。事实上,我已经根据不同的用例同时使用了 sys 和 env 。有关 sys/env 的详细信息是:logging.apache.org/log4j/2.x/manual/…。我让它工作了很长时间,然后继续前进。自从我查看自己的问题以来,已经有很多年了。感谢您查看并发布您的答案。
  • 太棒了!这很有帮助。等效的属性文件是property.filePathVar=${sys:filepath:-/logs/app.log}
猜你喜欢
  • 1970-01-01
  • 2017-12-20
  • 2014-10-30
  • 2021-11-19
  • 2019-08-31
  • 2015-09-02
  • 2019-01-06
  • 2017-01-26
  • 1970-01-01
相关资源
最近更新 更多