2016-04-20 41 views
1

我在運行Ubuntu的虛擬機上使用tomcat 7。現在,我有一個catalina.out文件在/var/lib/tomcat7/logs/catalina.out,超過20GB的大小。我試着先通過this教程轉動日誌文件。然後我發現它會在晚上結束時監控它。即使手動啓動服務也沒有多大作用。所以我刪除了該文件,但在重新啓動tomcat後出現了。永久限制tomcat的catalina.out文件大小

然後我試着做什麼公認的答案here出來,那就是進入conf/logging.properties和更改以下行:

.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler

.handlers = 1catalina.org.apache.juli.FileHandler

這似乎有工作了一分鐘,至少在我重新啓動我的虛擬機之前。一旦發生這種情況,我最終得到了另一個20GB的catalina.out文件。

有沒有一些經過驗證的方法可以阻止文件超過5MB或者只是限制文件?

+0

你應該有一個深入探討[在Java日誌(https://docs.oracle.com/javase/8/docs/technotes/guides/logging/overview.html)和[使用Tomcat記錄](http://tomcat.apache.org/tomcat-7.0-doc/logging.html)。 – Stefan

+0

http://stackoverflow.com/questions/8342336/how-to-set-maximum-number-of-rolls-and-maximum-log-size-for-tomcat – Stefan

回答

0

正如'Stefan'指出的,您可以使用標準java.util.logging.FileHandler而不是Tomcat附帶的標準。

默認情況下,org.apache.juli.FileHandler級別設置爲ALL。您可以嘗試提高處理程序日誌級別以過濾調試類型消息組。

.handlers = 1catalina.org.apache.juli.FileHandler 
1catalina.org.apache.juli.FileHandler.level=WARNING 
#1catalina.org.apache.juli.FileHandler.level=OFF 

否則,它看起來像你必須通過設置.filter財產上寫上處理自定義過濾器和install it

public class FileLengthFilter implements Filter { 

    private final File target; 
    private final long limit; 

    public FileLengthFilter() { 
     final String p = getClass().getName(); 
     LogManager lm = LogManager.getLogManager(); 
     String v = lm.getProperty(p + ".file"); 
     target = new File(v == null ? "." : v); 

     v = lm.getProperty(p + ".limit"); 
     long l; 
     try { 
      l = Long.parseLong(v); 
     } catch (RuntimeException re) { 
      l = 5L * 1024L * 1024L; 
     } 
     this.limit = l; 
    } 

    @Override 
    public boolean isLoggable(LogRecord record) { 
     try { 
      return target.length() <= limit; 
     } catch (RuntimeException se) { 
      return false; 
     } 
    } 
}