2013-10-27 42 views
3

我的要求是獲取壓縮的每日滾動日誌文件,並且只保留最後K天。帶日常滾動,gzip和最大備份文件的log4j配置

我知道我可以使用Apache的log4j的,額外 獲得與壓縮日常滾動文件,此配置:

<appender name="debugFileRolling" class="org.apache.log4j.rolling.RollingFileAppender"> 
    <!-- The active file to log to --> 
    <param name="file" value="debug.log" /> 
    <param name="append" value="true" /> 
    <param name="encoding" value="UTF-8" /> 
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> 
     <param name="FileNamePattern" value="/%d{yyyy-MM-dd}-debug.log.gz" /> 
    </rollingPolicy> 

    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%-5p %d [%t] %c: %m%n" /> 
    </layout> 
</appender> 

,我可以得到一個滾動文件,MaxBackupIndex。但我想結合兩者。

所以我的問題是:

是否有我可以使用一個appender會讓我所有三個:每天滾動,壓縮和最大的文件。 我知道我可以實現我自己的FileAppender,TriggeringPolicyRollingPolicy但我想避免這種情況。

回答

3

log4j 1.2沒有支持您所需功能的appender。 你必須使用你自己的實現。

log4j2似乎支持您的要求。請看log4j2文檔(http://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender):

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="warn" name="MyApp" packages=""> 
    <Appenders> 
    <RollingFile name="RollingFile" fileName="logs/app.log" 
     filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"> 
     <PatternLayout> 
     <Pattern>%d %p %c{1.} [%t] %m%n</Pattern> 
     </PatternLayout> 
     <Policies> 
     <TimeBasedTriggeringPolicy /> 
     <SizeBasedTriggeringPolicy size="250 MB"/> 
     </Policies> 
     <DefaultRolloverStrategy max="20"/> 
    </RollingFile> 
    </Appenders> 
    <Loggers> 
    <Root level="error"> 
     <AppenderRef ref="RollingFile"/> 
    </Root> 
    </Loggers> 
</Configuration>