首页 > 解决方案 > log4j 中的 sys:ls.logs 是什么意思?

问题描述

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

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

标签: javalog4j

解决方案


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

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

物业支持

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

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

    <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 源中的 Logstash 的DefaultDeprecationLoggerTest 中,它设置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");
    }

推荐阅读