我的服务器的类路径中有一个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存在的时候?
令人惊讶的是,类路径中存在的带有axis-ant.jar的jar正在另一台服务器上成功运行并正确运行..服务器都安装了相同的java 5版本和相同版本的log4j jar
答案 0 :(得分:9)
您应该查看log4j手册。 “默认初始化过程”一节描述了log4j如何尝试查找初始化文件,并解释了匹配特殊配置的可能性(例如,通过设置系统属性log4j.configuration
)。
如果您不想进行任何特殊配置,则必须确保您的配置文件是类路径中的第一个配置文件。
答案 1 :(得分:1)
根据应用程序服务器在类路径中找到jar的顺序,从jar中获取属性文件。现在没有办法确定地告诉从中加载属性文件的jar。
要解决此问题,大多数项目在服务器类路径本身中包含您的log4j.properties文件。这样,这个文件就是第一个要加载的属性文件,这是你的日志代码得到的文件。
答案 2 :(得分:0)
我注意到很确定,但这可能是订单问题。无论第一个/最后一个加载哪个log4j.properties都会赢(我必须检查)。
答案 3 :(得分:0)
可能因为axis-ant.jar在classpath之前出现在你自己的jar中。我假设你的jar在classpath之前,然后axis-ant.jar应该帮助