我正在阅读 log4j 文档和 logstash log4j 配置,我不知道 ${sys:ls.logs} 的意思。
${sys:ls.logs} 是什么意思? 我如何在运行时或操作系统环境中改变这个有价值的东西。 我使用 Ubuntu 操作系统。
答案 0 :(得分:1)
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}
在 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");
}