log4j 日志打印问题定位

黑盒表现:apache

运行 代码后,发现日志在jvm指定的参数-Dlog4j.configuration=file:****.properties配置的 日志并不打印日志到配置的文件中。app

发现日志会打印到另外一个****.properties的配置文件中配置的日志文件的位置,问题至关诡异。框架

定位:jvm

首先想到的是否是本身的.properties文件配置有问题,在配置文件中换了一个日志文件名,启动程序,发现文件能够建立。配置文件没有问题。debug

其次想到的是否是日志框架加载的类不对,挂断点,看打印的日志的对象类究竟是不是log4j的类,发现没问题。日志

再次想到log4j 框架自身有没有日志呢?果真有,在jvm的参数中加入-Dlog4j.debug启动项目,发现想要打印日志的appender 被加载了两遍,第二部配置文件的覆盖了个人因此打印到其余的properties配置的日志文件中了。code

到这里:“一脸懵逼。。。。。我明明没有加载他的日志properties配置文件的!”对象

再想怎么搞?io

根据 加载的多余的日志appender在程序所在的目录搜一把:find . -type f | xargs grep "log4j.properties"发现只有我本身的日志properties配置文件。配置

到了这里,我已经真的是蒙圈了。。。。。

索性,把他加载的多余的配置文件名字给改一下,看看程序还能不能加载,改了后,发现果真启动时报错。 这个时候,忽然想到是否是程序里面会加载一个固定的日志配置文件。

在整个项目里面搜了一把“log4j.properties”:结果然的是在代码里面把日志文件路径和文件名都给写死了。。。。。。。

用的方法是:org.apache.log4j.PropertyConfigurator类中的configure方法,参数是log4j.properties的路径。

PropertyConfigurator.configure(log4jPath);

至此诡异的问题终于找到了元凶。

相关文章
相关标签/搜索