log4j 日志打印问题定位

黑盒表现:

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

发现日志会打印到另一个****.properties的配置文件中配置的日志文件的位置,问题相当诡异。

定位:

首先想到的是不是自己的.properties文件配置有问题,在配置文件中换了一个日志文件名,启动程序,发现文件可以创建。配置文件没有问题。

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

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

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

再想怎么搞?

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

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

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

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

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

PropertyConfigurator.configure(log4jPath);

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

猜你喜欢

转载自my.oschina.net/u/1473861/blog/1791402
今日推荐