使用限制大小保留日志文件超过一周

时间:2013-11-18 07:40:03

标签: logback

我使用logback写入日志文件:            

    <filter class="mypackage.logging.MarsLogFilter">
        <loggerName>mypackage.monitor</loggerName>  
        <level>DEBUG</level>
        <match>ACCEPT</match>
        <mismatch>DENY</mismatch>           
    </filter>

    <file>logs/taskMonitor.log</file>

    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <FileNamePattern>logs/archive/taskMonitor.%i.log.zip</FileNamePattern>
        <minIndex>1</minIndex>
        <maxIndex>12</maxIndex>
    </rollingPolicy>

    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
          <maxFileSize>300MB</maxFileSize>
    </triggeringPolicy>

    <encoder>
        <pattern>%d [%-5level] [%C:%L] - %m%n</pattern>
    </encoder>

</appender>

我想保留一周的日志,问题是使用FixedWindowRollingPolicy的logback保留最多12个文件

如何保留超过12个大小为300MB的文件

1 个答案:

答案 0 :(得分:3)

这就是问题所在,您需要在基于时间和基于尺寸的选择之间做出选择。

如果您的选择是基于时间的:您无法控制尺寸。这在某种程度上是合乎逻辑的,因为如果限制大小,基于时间的解决方案将毫无用处。你可以丢失一部分日志。

如果您的选择是基于大小的:那么您真的想控制磁盘大小。如果发生了不好的事情,那么您的磁盘大小是安全的,但您的日志文件可能非常有限......

我的个人解决方案是创建2个appender:

  • 基于时间的:保留信息一段时间,但请在更高的日志级别中记录:示例:错误
  • 基于尺寸:保持更详细的日志记录,但限制大小以保护您的磁盘,当发生“坏”事件时。

基于时间:每天滚动,保持记录30天

<appender name="DAILY" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_HOME}/daily.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOG_HOME}/daily-%d{yyyy-MM-dd}.log.zip</fileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>%date - %msg%n</pattern>
    </encoder>
</appender>

基于大小:保护磁盘免受太多日志

<appender name="WATCHDOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_HOME}/watchdog.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <fileNamePattern>${LOG_HOME}/watchdog-%i.log.zip</fileNamePattern>
        <minIndex>1</minIndex>
        <maxIndex>10</maxIndex>
    </rollingPolicy>
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>100MB</maxFileSize>
    </triggeringPolicy>
    <encoder>
        <pattern>%date %-5level [%thread] - [%logger] - %msg%n</pattern>
    </encoder>
</appender>

然后你可以添加2个根记录器(公众不知道的东西,但这是可能的):

<root level="ERROR">
    <appender-ref ref="DAILY"/>
</root>
<root level="INFO">
    <appender-ref ref="WATCHDOG"/>
</root>