簡體   English   中英

使用spring + tomcat6,java日志惡夢和log4j的行為與預期不符

[英]java logging nightmare and log4j not behaving as expected with spring + tomcat6

我有一個spring應用程序已經配置了log4j(通過xml),並且運行在Tomcat6上運行正常,直到我們通過Maven添加一堆依賴項。 在某些時候,整個應用程序剛剛開始記錄它應該聲明的部分內容到log4.xml中

“這里有一個小小的咆哮”為什么在java世界中日志記錄必須那么難? 為什么突然一個應用程序開始表現得如此奇怪以及為什么它如此難以調試?

我一直在閱讀並試圖解決這個問題好幾天,但到目前為止沒有運氣,希望這里的一些專家可以給我一些見解

我添加了log4j調試選項來檢查log4j是否正在讀取配置文件及其值,這是它的一部分顯示

log4j: Level value for org.springframework.web is  [debug].
log4j: org.springframework.web level set to DEBUG
log4j: Retreiving an instance of org.apache.log4j.Logger.
log4j: Setting [org.compass] additivity to [true].
log4j: Level value for org.compass is  [debug].
log4j: org.compass level set to DEBUG

正如您所看到的,對compass和spring.web啟用了調試,但它只顯示了兩個包的“INFO”級別。 我的log4j配置文件只有一個簡單的ConsoleAppender

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

 <!-- Appenders -->
 <appender name="console" class="org.apache.log4j.ConsoleAppender">
  <param name="Target" value="System.out" />
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%-5p: %c - %m%n" />
  </layout>
 </appender>

這項工作的訣竅是什么? 這是我的誤解嗎? 有人能指出我正確的方向,並解釋如何使這個日志混亂更加防彈?

它可能不是正在執行日志記錄的log4j,因此您的log4j配置將被忽略。 使用Commons Logging的Spring日志,這是一個可以委托給各種日志框架的api,包括log4j。 要確定要使用的實現,公共日志記錄會查看類路徑。

如果添加了將其自己的日志記錄實現拖到類路徑中的依賴項,則commons日志記錄現在可能會使用其他實現。

我建議在調用日志記錄工具時設置斷點,並跟蹤執行情況以查看使用的日志記錄實現。

由於它一直在工作,直到您通過Maven加載了許多依賴項,也許是通過這些依賴項無意中加載了Log4j配置?

運行mvn dependency:tree以查看正在加載的內容,然后查看是否有任何這些依賴項具有Log4j配置。

我認為你的問題是你沒有在你的appender上設置threshold參數,並且(也許)因為你沒有將這些appender分配給你的記錄器。

嘗試將param name="threshold" value="debug"到您的appender,然后將它們顯式添加到特定(或根)記錄器,如下所示:

<appender name="console" class="org.apache.log4j.ConsoleAppender">
    <param name="threshold" value="debug" />
    <param name="Target" value="System.out" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%-5p: %c - %m%n" />
    </layout>
</appender>

<logger name="org.springframework.web">
    <level value="debug" />
    <appender-ref ref="console" />
</logger>

此外, 此頁面顯示 “此附加程序不會記錄優先級低於此處指定的消息,即使類別的優先級設置得更低”,這可能是您的問題的根源。

這似乎是一個很好的線索供您閱讀: http//forum.springsource.org/showthread.php?t = 88250

切入追逐,似乎海報有一個Tomcat安全設置的問題。 更新的Tomcat策略文件修復了該問題。

對於log4j.xml文件,可能需要在webapp外部進行讀取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM