我使用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的文件
答案 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>