通过 JVM 参数设置 log4j 属性文件 - 为什么顺序很重要?
Setting log4j properties file via JVM argument - why does order matter?
我构建了一个 jar 文件,其中有一个 log4j.properties
文件(mvn package
默认情况下将它放在 resources
目录中)。但是当我 运行 这个 jar 文件时,我想传递一个不同的日志配置,所以我添加 -Dlog4j.configuration=file:{path to file}
。困扰我的问题是这里的顺序如下:
- 当我运行
java -jar {path to jar} -Dlog4j.configuration=file:{path to file}
然后它读取打包在jar中的日志文件。
- 当我运行
java -Dlog4j.configuration=file:{path to file} -jar {path to jar}
时,它会从我传入参数的文件中读取配置。
我对类路径在 java 中的工作方式有粗略的了解,如果我加载多个具有相同名称的 java 类,就会有所不同。但是通过这种方式,我传递了一个带有 -D
前缀的配置参数,所以我希望它起作用的方式是 log4j
库中的一些代码检查是否设置了 -Dlog4j.configuration
以及是否设置了,然后从那里加载配置,否则尝试在类路径中找到它。
关于我遗漏的任何想法?
如果您在命名 JAR
文件后提供任何内容,它将被视为您的 main
方法的参数。对于 Log4J,您实际上必须定义一个 属性,这需要在您指定 -jar
.
之前完成
我构建了一个 jar 文件,其中有一个 log4j.properties
文件(mvn package
默认情况下将它放在 resources
目录中)。但是当我 运行 这个 jar 文件时,我想传递一个不同的日志配置,所以我添加 -Dlog4j.configuration=file:{path to file}
。困扰我的问题是这里的顺序如下:
- 当我运行
java -jar {path to jar} -Dlog4j.configuration=file:{path to file}
然后它读取打包在jar中的日志文件。 - 当我运行
java -Dlog4j.configuration=file:{path to file} -jar {path to jar}
时,它会从我传入参数的文件中读取配置。
我对类路径在 java 中的工作方式有粗略的了解,如果我加载多个具有相同名称的 java 类,就会有所不同。但是通过这种方式,我传递了一个带有 -D
前缀的配置参数,所以我希望它起作用的方式是 log4j
库中的一些代码检查是否设置了 -Dlog4j.configuration
以及是否设置了,然后从那里加载配置,否则尝试在类路径中找到它。
关于我遗漏的任何想法?
如果您在命名 JAR
文件后提供任何内容,它将被视为您的 main
方法的参数。对于 Log4J,您实际上必须定义一个 属性,这需要在您指定 -jar
.