[英]How to rotate log files based on time rather than size in Log4j?
我使用Log4j和RollingFileAppender
根據大小創建日志輪換。
如何將其配置為在旋轉前記錄每個文件一段時間 ?
例如,每個日志文件包含一小時的日志,在每小時的頂部旋轉?
我使用Properties
對象以編程方式在Java中配置Log4j(而不是log4j.properties
文件)
您可能想要使用DailyRollingFileAppender 。 例如,要按小時滾動它們,您將使用'.'yyyy-MM-dd-HH
的DatePattern。 對於log4j.properties文件:
log4j.appender.myAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.myAppender.DatePattern='.'yyyy-MM-dd-HH
...
或者為您的程序化配置:
DailyRollingFileAppender appender = new DailyRollingFileAppender();
appender.setDatePattern("'.'yyyy-MM-dd-HH");
Logger root = Logger.getRootLogger();
root.addAppender(appender);
不幸的是,使用DailyRollingFileAppender意味着您不能限制文件大小 - 如果您在給定的滾動周期中有大量日志,這可能會有問題。
另外,
log4j.appender.myAppender=org.apache.log4j.DailyRollingFileAppender
**log4j.appender.myAppender.DatePattern='.'yyyy-MM-dd-HH**
以下列表顯示了log4j定義的所有日期模式,
Minutely '.'yyyy-MM-dd-HH-mm application.log.2013-02-28-13-54
Hourly '.'yyyy-MM-dd-HH application.log.2013-02-28-13
Half-daily '.'yyyy-MM-dd-a application.log.2013-02-28-AM app.log.2013-02-28-PM
Daily '.'yyyy-MM-dd application.log.2013-02-28
Weekly '.'yyyy-ww application.log.2013-07 app.log.2013-08
Monthly '.'yyyy-MM application.log.2013-01 app.log.2013-02
使用任何滾動文件appender時要注意的另一件事是確保一次只有一個JVM訪問特定的日志文件。 這是因為log4j緩存日志文件大小是出於性能原因,如果多個JVM訪問相同的文件,那么“滾動”會變得很糟糕。
特別是,將其'datePattern'屬性設置為'.'yyyy-MM-dd-HH
會導致文件每小時輪換一次。
您需要使用DailyRollingFileAppender 。 盡管它具有誤導性的名稱,但它可以配置為在可配置的時間段內運行,最長可達數分鍾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.