【问题标题】:How is it possible to reference a variable from log4j.properties file?如何从 log4j.properties 文件中引用变量?
【发布时间】:2015-05-19 16:28:16
【问题描述】:

我需要解决以下任务。

我们在 1.2x 版本中使用 log4j 并希望尽可能保留它。我们在 log4j.properties 文件中有一个 graylog appender,我们在其中设置了 ip 地址和端口。如果它们是硬编码的,则可以将日志记录到灰色日志中。

任务是在 log4j.properties 文件中以某种方式配置这两个参数(IP 和端口)。

之后,每个部署环境的运营团队只需为 IP 和端口设置一次此配置,它将适用于所有在 log4j.properties 文件中使用此变量的 java 项目。

理想的解决方案是使用操作系统的环境变量,但任何其他配置作为属性文件(不是 log4j 本身之一,除了使用 JVM 参数 - 这不是我们的选项)或其他一些解决方案

我已经读到 log4j 版本 2.x 可以做到这一点,但这会花费我们很多时间(将 log4j.propeties 文件转换为 log4j2.x 文件)。手动xml,更改代码..)。

我会很高兴得到任何合理的答案。

【问题讨论】:

标签: java variables logging log4j


【解决方案1】:

这可以在 log4j.properties 文件中完成。请注意,您不能使用环境变量(这是特定于平台的概念)。

这 2 个属性(IP 和端口)可以在代码中设置或使用“-D”JVM 选项。

在你的例子中:

java ... -Dip=%YOUR_IP% -Dport=%YOUR_PORT% ... your_app

这允许您使用 ${...} 表示法来引用该属性 例如:

log4j.graylog_appender.LOGGER.IP=${ip}
log4j.graylog_appender.LOGGER.PORT=${port}

希望对你有帮助!

【讨论】:

  • 感谢您的回答aviad ;) 。在问我的问题之前,我已经找到了这个解决方案并且它有效。但这不是我们的选择,因为配置应该在某个属性文件或类似文件中,而不是作为 JVM 参数。
【解决方案2】:

System.setProperty("key", "value");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-13
    • 2018-07-01
    • 2019-10-17
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    相关资源
    最近更新 更多