【问题标题】:log4j.properties not picked up from jarlog4j.properties 未从 jar 中提取
【发布时间】:2011-03-23 09:12:42
【问题描述】:

我的服务器的类路径中有一个 jar,其中包含 jar 根目录上的 log4j.properties 文件,用于记录代码。当 jar 中的代码运行时,不会发生代码的日志记录。当我使用 java -Dlog4j.debug 选项分析问题时,我知道 log4j 正在加载 axis-ant.jar 的 log4j.properties 文件(这也是在我的类路径上)并使用它而不是我的 jar 的属性文件。

当我随后从类路径中删除了 axis-ant.jar 时,我的 jars log4j.properties 文件立即被选中,并记录了我的代码。

有人能解释一下为什么我的 log4j.properties 文件在 axis-ant.jar 存在时没有被加载吗?

令人惊讶的是,classpath 中存在 axis-ant.jar 的同一个 jar 正在另一台服务器上成功运行正确的日志记录。两台服务器都安装了相同的 java 5 版本和相同版本的 log4j jar

【问题讨论】:

    标签: java logging log4j


    【解决方案1】:

    您应该看看log4j 手册。 “默认初始化过程”部分描述了 log4j 将如何尝试查找初始化文件并解释匹配特殊配置的可能性(例如,通过设置系统属性 log4j.configuration)。

    如果您不想进行任何特殊配置,则必须确保您的配置文件是类路径中的第一个。

    【讨论】:

    • 手册和正确部分 +1 :) 该页面的一句话:“指定默认初始化文件的首选方法是通过 log4j.configuration 系统属性。”所以如果想要加载一个特定的文件,给那个文件一个特殊的名字并将它传递给 log4j.configuration 系统属性。
    • 解决方案似乎是为所有日志记录保留一个文件。这需要保存在 log4j 可以访问的位置。谢谢
    • 通过在我的tomcat启动中设置-Dlog4j.configuration=log4j.properties,我的web应用程序开始使用$CATALINA/lib/log4j.properties而不是嵌入的jar文件log4j配置。
    【解决方案2】:

    属性文件是根据应用程序服务器在类路径中找到 jar 的顺序从 jar 中提取的。现在没有办法确定要从哪个 jar 中加载属性文件。

    为了解决这个问题,大多数项目将您的 log4j.properties 文件包含在服务器类路径本身中。这样,该文件是要加载的第一个属性文件,也是您的日志代码获取的属性文件。

    【讨论】:

    • 所以我们说理想情况下我们应该为一个项目拥有一个 log4j.properties 并在类路径中保持相同。
    • 是的。你真的不需要多个 log4j.properties 文件。您可以在一个规则中添加任何您想要的规则。
    【解决方案3】:

    我很确定,但这可能是订单问题。无论哪个 log4j.properties 首先/最后加载都会获胜(我必须检查一下)。

    【讨论】:

    • 如果 log4j 按顺序加载属性文件,则意味着第一个加载的 log4j.properties 文件将始终取代类路径中的所有其他 log4j.properties。如果应该加载多个 jar 的 log4j.properies,这将是一场日志噩梦
    • 那么,应该如何处理相互矛盾的属性?最简单的方法是不允许只使用一个文件(在这种情况下,第一个或最后一个文件无关紧要)。
    • 是的,保留一个文件似乎是解决方案..谢谢:)
    【解决方案4】:

    可能是因为axis-ant.jar 在类路径中出现在您自己的jar 之前。我假设将您的 jar 放在类路径中,然后 axis-ant.jar 应该会有所帮助

    【讨论】:

    • 好的......但在我的情况下,axis-ant.jar 放在 ext 文件夹中。这可能是它首先加载的原因吗?
    • yes..ext(extension dir) 文件夹中的所有 jars 将在类路径中的 jars 之前被拾取,因为 ext jars 是由扩展类加载器加载的,它是应用程序类加载器的父类
    猜你喜欢
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多