2016-11-08 168 views
0

我有一個在java中使用log4j作爲日誌記錄jar的應用程序,但是當我嘗試調試我的應用程序並打開日誌文件時,我發現它很短,只有最後一行我登錄,並且循環文件沒有顯示任何我以前見過的日誌。爲什麼我的日誌被刪除?

我的配置文件有問題嗎?我有多個項目指向同一個日誌文件,難道這是問題嗎?

這裏是我的log4j.properties:

log4j.rootLogger=ERROR,logfile 

log4j.appender.logfile=org.apache.log4j.RollingFileAppender 
log4j.appender.logfile.File=/opt/tomcat7/logs/mylogs.log 

log4j.appender.logfile.MaxFileSize=500KB 
# Keep one backup file 
log4j.appender.logfile.MaxBackupIndex=2 

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 
log4j.appender.logfile.layout.ConversionPattern=%d %5p (%F:%L) - %m%n 

感謝

+0

使用DailyRollingFileAppender代替RollingFileAppender進行。它可以幫助嗎? –

+0

我發現問題出在我的ispmanager上,它沒有顯示完整的文件。謝謝。 –

回答

2

您根記錄的指定級別爲錯誤,而在大多數情況下,不會有很多的錯誤消息 - 也許有 - 每兩個INFO級別的消息,而你壓制它們:ERROR級別只允許記錄ERROR和FATAL消息。它可以提取任何INFO,WARN,DEBUG,TRACE級別。通常你不會在開發中使用這樣的設置。在生產中,你通常只會壓制一些詳細的類/包,但不是像你在發佈的配置中一樣(這裏的意思是ERROR級適用於每個類)。

所以我想你應該在你的配置中用INFO代替ERROR。

更新:也可能log4j根本沒有看到您的配置文件。我遇到了這個問題親自幾次,每次我有這樣的一種解決方法:

public class Log4JProperties { 

    public static void setupLog4j(){ 
     String log4jPathFile = Log4JProperties.class.getResource("/log4j.properties").getFile(); 

     Properties props = new Properties(); 
     try { 
      InputStream configStream = new FileInputStream(log4jPathFile); 
      props.load(configStream); 
      configStream.close(); 
     } catch (IOException e) { 
      System.out.println("log4j configuration file not found"); 
     } 
     LogManager.resetConfiguration(); 
     PropertyConfigurator.configure(props); 
    } 

} 

這是沒有必要的,當我從裏面的IntelliJ運行代碼,但是當我運行使用Maven,記錄不會不調用工作這個函數在執行的開始。

+0

這不是問題,當我說有日誌丟失時,我的意思是我以前看過的錯誤日誌,而且我知道他們在那裏。現在,這些日誌不在日誌文件或備份中,它們根本就不在任何地方。這是發生在生產這就是爲什麼我使用級錯誤 –

+0

@AnaFranco然後可能log4j沒有發現您的配置文件。我有好幾次這個問題。我更新了答案。 – Yurii

0

當您指定MaxBackupIndex = 2時,它只會保留最後2次備份,如果日誌文件快速填滿,舊的備份文件將被覆蓋。

您可能需要根據您的文件記錄的行爲MAXFILESIZE或MaxBackupIndex增加...

https://logging.apache.org/log4php/docs/appenders/rolling-file.html

+0

我認爲這可能是問題,但檢查備份文件的日期真的很舊,就像新的日誌永遠不會到達那裏,我已經增加了這些值,但仍然有日誌丟失 –