【问题标题】:log4j likes its properties in a jar file?log4j 喜欢它在 jar 文件中的属性?
【发布时间】:2014-09-26 14:23:00
【问题描述】:

我有一个 Java 应用程序,我在 Linux 上直接从可执行 jar 文件执行

java -cp .:./lib -Duser.timezone=GMT -Dlog4j.debug -jar programName.jar

该程序使用了许多其他的 jar 文件,它们都在一个目录中,还有 4 个属性文件都在另一个目录(当前目录)中。这两个目录都包含在CLASSPATH 中。

够简单了吧。

除了 Log4j 找不到 log4j.properties 之外,它会是。我设法让它找到log4j.properties 的唯一方法是将它包含在programName.jar

这不是我想要的,我想让它使用 log4j.properties 与所有其他属性文件位于同一目录中,它们位于 CLASSPATH 中,并且可以按照您的预期找到。

正在使用的其他 jar 文件有:

  • jdom-2.0.5.jar
  • log4j-1.2.17.jar
  • ojdbc7.jar
  • quartz-2.2.1.jar
  • slf4j-api-1.7.7.jar
  • slf4j-log4j12-1.7.7.jar

我想知道slf4j-log4j12-1.7.7.jar 是否做了一些配置来阻止log4j 在查找属性文件时扫描CLASSPATH。我的代码不包含任何旨在指定属性文件位置的指令。

我还没有尝试在没有-jar 选项的情况下执行程序,接下来我会尝试。

到目前为止,这是否敲响了警钟?

【问题讨论】:

    标签: java properties log4j executable-jar


    【解决方案1】:

    向 jvm (log4j.configuration) 添加一个参数。例如:

    java -cp .:./lib -Dlog4j.configuration=file:log4j.properties -Duser.timezone=GMT ...
    

    您可能希望查看此answer 以获取更多选项。

    【讨论】:

    • 感谢您的建议,但我不明白您的理由。我的 log4j.properties 只是在它包含的意义上是自定义的。它的名称和位置是标准的。请您详细说明为什么我在使用标准(非 xml)名称时需要指定名称。
    • 你好,保罗,谢谢你,你的建议确实有帮助,它让我继续前进。可悲的是,我很沮丧,不知道为什么 Log4j 无法找到 log4j.properties,即使它在 CLASSPATH 中。
    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 2018-01-24
    • 2013-01-09
    • 1970-01-01
    相关资源
    最近更新 更多