我正在处理一个遗留项目,它使用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传递。
1条答案
按热度按时间w46czmvw1#
系统属性查找是Log4j版本2的一个特性。
Spark与Log4j 1.x桥打包在一起,当找到像
log4j.properties
这样的遗留配置文件时,这个桥就会被激活。这意味着您不能使用log4j.properties
内部的查找。但即使在Log4j 1.x中,您也可以使用JVM系统属性,例如:你用
-Dprop=val
设置的所有东西。因此,您可以将log4j.properties
中的条目更改为然后根据您的设置,使用
-DBUCKET_ID=${BUCKET_ID}
或通过extraJavaOptions
提供值。