如何访问log4j.properties文件中的应用程序参数?

mrphzbgm  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(97)

我正在处理一个遗留项目,它使用log4j.properties文件进行日志配置。在属性文件中,我试图以以下方式访问系统变量(或应用程序参数)-

log4j.appender.consoleapp.layout.ConversionPattern=%d %d{Z} [%t] %-5p (%F:%L) - %m%n BUCKET_ID=${sys:BUCKET_ID:-default_id}

# logs are getting generated like-
# 2016-05-14 00:34:11,994 +0530 [main] WARN  (Log4jExample.java:20) - My Warn Log BUCKET_ID=

但是我无法获得BUCKET_ID值,即使BUCKET_ID是我提供的应用程序参数。我也试过将变量替换为BUCKET_ID=${BUCKET_ID},但没有用。
更新:也许我应该早点提到这个,但它是Java中的一个Spark应用程序。我知道spark只支持log4j。我通过-Dlog4j.configuration=file:www.example.com添加属性文件log4j.properties,它被选中,但BUCKET_ID没有在日志中设置,即使我在驱动程序和执行器配置中将BUCKET_ID作为extrajavaoptions传递。

w46czmvw

w46czmvw1#

系统属性查找是Log4j版本2的一个特性。
Spark与Log4j 1.x桥打包在一起,当找到像log4j.properties这样的遗留配置文件时,这个桥就会被激活。这意味着您不能使用log4j.properties内部的查找。
但即使在Log4j 1.x中,您也可以使用JVM系统属性,例如:你用-Dprop=val设置的所有东西。因此,您可以将log4j.properties中的条目更改为

log4j.appender.consoleapp.layout.ConversionPattern= [...] BUCKET_ID=${BUCKET_ID}

然后根据您的设置,使用-DBUCKET_ID=${BUCKET_ID}或通过extraJavaOptions提供值。

相关问题