2015-11-02 50 views
0

我要尋找某種形式的清單,這將幫助我解決以下問題:如何識別未記錄日誌的原因?

我有運行Tomcat 8 web應用程序。我使用Log4J2 v2.1Apache Commons Logging v1.2。我的應用程序記錄了幾天,然後突然停止記錄。沒有任何例外被記錄。沒有!

我無法理解爲什麼發生這種情況以及可能是什麼原因。此外,我不知道如何努力尋找根本原因。

順便說一句,系統有足夠的可用磁盤空間〜500GB和tomcat日誌,如localhost_access日誌和其他人繼續記錄不間斷。

編輯:按照要求,張貼log4j2配置 -

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration> 
    <Appenders> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%p [%t] %c{1}.%M(%L) | %m%n"/> 
     </Console> 

     <RollingFile name="RollingFile" fileName="../logs/app.log" 
           filePattern="../app/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"> 
      <PatternLayout> 
       <Pattern>%d{ISO8601} [REQ_ID|%X{REQUEST_UUID}] %p [%t] %c{1}.%M(%L) | %m%n</Pattern> 
      </PatternLayout> 
      <Policies> 
       <OnStartupTriggeringPolicy/> 
       <TimeBasedTriggeringPolicy interval="6" modulate="true"/> 
       <SizeBasedTriggeringPolicy size="5 MB"/> 
      </Policies> 
     </RollingFile> 
    </Appenders> 

    <Loggers> 
     <Logger ... /> 
     ... 
     <Root level="debug"> 
      <AppenderRef ref="RollingFile"/> 
     </Root> 
    </Loggers> 
</Configuration> 
+0

請發佈您的完整log4j配置文件。 –

回答

0

通常的罪魁禍首這裏是該文件由日誌輪換工具改名。如果它在幾天後發生,那麼日誌旋轉工具被配置爲在文件達到一定大小時將文件移開。這些工具通常會壓縮日誌文件。

會發生什麼事是:

  1. Java進程打開日誌文件。 OS分配一個文件描述符。
  2. 過了一段時間後,日誌旋轉工具會重命名該文件。由於Java寫入文件描述符,它不會注意或關心重命名(文件描述符保持不變)。
  3. 然後該工具壓縮文件。爲此,創建一個新文件(壓縮文件)。
  4. 當日志被壓縮時,該工具將刪除原始日誌文件。
  5. Java繼續寫入文件描述符。由於描述符不再連接到目錄條目,因此無法看到它。

解決方案:在Java日誌記錄工具中配置日誌輪換或將其配置爲與外部日誌輪換工具配合使用。

+0

日誌循環在log4j2.xml文件的log4j2配置中進行配置。任何其他方式檢查了這一點? – Rishabh

+0

@Rishabh你100%肯定沒有人在操作系統級別配置日誌輪迴?在這種情況下,您需要使用遠程調試選項啓動應用程序。然後,可以在遠程調試器停止工作時連接到它。我的猜測是你在某個地方有一個死鎖。 –

+0

是的,我相信在操作系統級別沒有任何日誌輪轉,因爲我自己配置​​了它。按照建議調試「死鎖」。 – Rishabh