通过JVM参数设置log4j属性文件 - 为什么订单很重要?

时间:2018-01-08 14:28:42

标签: java jvm log4j config

我已经构建了一个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,如果是的话,然后从那里加载配置,否则尝试在类路径上找到它。

关于我缺少的任何想法?

1 个答案:

答案 0 :(得分:2)

如果在命名JAR文件后提供任何内容,则会将其视为main方法的参数。对于Log4J,您实际上必须定义一个属性,这需要在指定-jar之前完成。