2011-11-03 106 views
6

我想創建可以在第二天開始時滾動的日誌文件,或者如果它已達到指定的文件大小並且日誌文件必須包含在日期文件夾內。 文件夾的格式是YYYYMMDD/20111103/mylogfile.log如何通過log4j控制每日滾動和最大文件大小的日誌文件?

是否有可能通過Log4j做到這一點而不實現自定義類?

現在我正在使用log4j和log4j-extra, 我將log4j API中定義的FileNamePattern屬性設置爲每天滾動文件 並將最大文件大小設置爲50 MB。

log4j.xml是:

<appender name="MYAPPENDER" class="org.apache.log4j.rolling.RollingFileAppender"> 
    <param name="encoding" value="UTF-8" /> 
    <param name="append" value="true" /> 
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> 
     <param name="FileNamePattern" value="${catalina.home}/logs/MY-APP/%d{yyyyMMdd}/MY-APP_%d{yyyyMMddHHmmss}.log" /> 
    </rollingPolicy> 
    <triggeringPolicy class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy"> 
     <param name="maxFileSize" value="50000000" /> 
    </triggeringPolicy> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="[%d{dd/MM/yyyy HH\:mm\:ss}] %-5p [%c.%M(),%4L] - %m%n" /> 
    </layout> 
</appender> 

結果上面設置的是日誌文件沒有在未來幾天開始推出,但如果文件大小達到50 MB,日誌文件將被捲起。

請幫忙指教一下。米(_ _)米

回答

0

從RollingFileAppender進行documentation

而沒有任何用途,一RollingFileAppender進行實例必須同時具有RollingPolicy和TriggeringPolicy設置.... TimeBasedRollingPolicy既充當RollingPolicy和一個 TriggeringPolicy。

因此,由於上面配置了TimeBasedRollingPolicy,因此您的SizeBasedTriggeringPolicy會被忽略。滿足您的需求的唯一方法是自定義類實現。另外,如果日誌文件的大小確實很重要,那麼可以考慮使用automatic gzip compression來消除SizeBasedTriggeringPolicy,並且每日只有日誌滾動。

3

要啓用每天滾動:類= 「org.apache.log4j.DailyRollingFileAppender」

,並啓用最大文件大小和備份文件

<param name="MaxFileSize" value="200MB" /> 
<param name="MaxBackupIndex" value="4" /> 

個數,但你不能把MaxFileSizeDailyRolling,所以你可以使用滾動文件appender

一個例子:

<appender name="MAIN_FA" class="org.apache.log4j.RollingFileAppender"> 
    <param name="File" value="logs/main.log" /> 
    <param name="datePattern" value="'-'yyyy-MM-dd'.log'" /> 
    <param name="append" value="false" /> 
    <param name="Threshold" value="ALL" /> 
    <param name="MaxFileSize" value="200MB" /> 
    <param name="MaxBackupIndex" value="4" /> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%t] %-5p %C{6} (%F:%L) - %m%n" /> 
    </layout> 
</appender> 

或者你可以爲我與有關XML做到這一點http://wiki.apache.org/logging-log4j/DailyRollingFileAppender

6

日常工作只有轉化爲log4j的。相同的性能100KB後翻身(用於測試目的):

# Root logger option 
log4j.rootLogger=INFO, file 

# Direct log messages to a file 
log4j.appender.file=org.apache.log4j.rolling.RollingFileAppender 
log4j.appender.file.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy 
log4j.appender.file.RollingPolicy.FileNamePattern=/path/to/logs/%d{yyyyMMdd}/myLog_%d{yyyyMMddHH}.log 
log4j.appender.file.TriggeringPolicy=org.apache.log4j.rolling.SizeBasedTriggeringPolicy 
log4j.appender.file.TriggeringPolicy.maxFileSize=100000 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 
log4j.appender.file.Append=true 

這將創建一個時間戳目錄(每天一個目錄 - 可選)與下列格式的日誌(每小時一個用於測試目的 - 改變FileNamePattern根據您的需求):

myCompanyLog_20160203 30.log

myCompanyLog_20160203 30.log