log4j 中的 sys:ls.logs 是什么意思?

时间:2021-07-12 06:25:25

标签: java log4j

我正在阅读 log4j 文档和 logstash log4j 配置,我不知道 ${sys:ls.logs} 的意思。

${sys:ls.logs} 是什么意思? 我如何在运行时或操作系统环境中改变这个有价值的东西。 我使用 Ubuntu 操作系统。

1 个答案:

答案 0 :(得分:1)

sys 是 Log4j 2 中的系统属性。Log4j 支持语法 ${prefix:name} ,其中前缀标识告诉 Log4j 应该在特定上下文中评估变量名称。查看 Log4j 2 个文档

<块引用>

sys:系统属性。格式为 ${sys:some.property} 和 ${sys:some.property:-default_value}。

Property Support

<块引用>

您可以在配置中引用属性,Log4j 将直接替换它们,或者 Log4j 将它们传递给将动态解析它们的底层组件。属性来自配置文件中定义的值、系统属性、环境变量、ThreadContext Map 和事件中存在的数据。

系统属性通常在应用程序外部定义,您可以通过 Lookup 访问它们。您可以通过添加自己的查找插件来进一步自定义属性提供程序。也可以使用语法 ${lookupName:key:-defaultValue} 在 Lookup 中指定默认属性。

    <Appenders>
      <File name="ApplicationLog" fileName="${sys:logPath:-/var/logs}/app.log"/>
    </Appenders>

此外,使用名为 ls.logs 的系统属性查找,在 Log4j 1.x 中,语法为 ${ls.logs}。在 Log4j 2 中,语法为 ${sys:ls.logs}

此属性可以在应用程序源中设置或作为启动服务时的参数。例如,在 logstash 源中的 DefaultDeprecationLoggerTest for logstash 中,它被设置为 build/logs,如下所示:

    @Before
    public void setUp() throws IOException {
        System.setProperty("log4j.configurationFile", CONFIG);
        System.setProperty("ls.log.format", "plain");
        System.setProperty("ls.logs", "build/logs");

        LogTestUtils.deleteLogFile("logstash-deprecation.log");
    }