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);

至此詭異的問題終於找到了元兇。

相關文章
相關標籤/搜索