我将Logback与TimeBasedRollingPolicy
结合使用,每小时将文件滚动一次:
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${serverpath}/logs/history-debug/debug.%d{yyyy-MM-dd_HH}.log.zip</fileNamePattern>
<maxHistory>168</maxHistory> <!--7Days-->
<totalSizeCap>2GB</totalSizeCap>
</rollingPolicy>
在我看来,原始(尚未滚动)的日志文件有时可能会变得非常大(几个GB)。我现在想在配置中添加一个SizeBasedTriggeringPolicy
,以便在原始日志文件超过某个限制(例如5GB)时额外滚动文件。
因此,日志文件应每小时滚动一次,除非文件变大,则应更早滚动。
我尝试了这个:
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${serverpath}/logs/history-debug/debug.%d{yyyy-MM-dd_HH}.%i.log.zip</fileNamePattern>
<maxHistory>168</maxHistory> <!--7Days-->
<totalSizeCap>2GB</totalSizeCap>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5GB</maxFileSize>
</triggeringPolicy>
但是随后出现错误,因为%i
与TimeBasedRollingPolicy不兼容。
我也尝试了SizeAndTimeBasedRollingPolicy
,但是那只是将经过翻转的文件分割成较小的部分,而不看原始日志文件的大小。
答案 0 :(得分:0)
是否可以将TimeBasedRollingPolicy与SizeBasedTriggeringPolicy结合?
是的,SizeAndTimeBasedRollingPolicy
是您的解决方案。
<appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>D:/logs/log.txt</file>
<append>true</append>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%p %d [%t] %L - %m%n</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>D:/logs/log.%d{yyyy-MM-dd HH-mm}.%i.txt</fileNamePattern>
<maxFileSize>1MB</maxFileSize>
<!-- keep 30 days' worth of history -->
<maxHistory>30</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
</appender>
配置,以在原始日志文件超过特定限制(例如5GB)时额外滚动文件
这是您的大小限制:<maxFileSize>1MB</maxFileSize>
将其更改为5GB,我已经测试过1MB,但它可以在任何大小下使用
因此,日志文件应每小时滚动一次,除非文件变大,则应更早滚动。
如果我对您的理解正确,则您希望根据最大尺寸或时间(以先达到者为准)滚动。通过以下操作实现基于时间的滚动:{yyyy-MM-dd HH-mm}
。此滚动每分钟滚动一次,如果您想每小时滚动一次,请使用:{yyyy-MM-dd HH}
。
使用上面的附加程序时,输出如下:
如果一分钟内达到该大小,或者如果大小未达到但到达时间仍在滚动,则可以看到文件正在以1MB的最大大小旋转(这在文件log.2019-01-04 12-23.2.txt
中很明显和log.2019-01-04 12-24.3.txt
)
最适合您的logback.xml是:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- Send debug messages to System.out -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%p %d [%t] %L - %m%n</pattern>
</encoder>
</appender>
<appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>D:/logs/log.txt</file>
<append>true</append>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%p %d [%t] %L - %m%n</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>D:/logs/log.%d{yyyy-MM-dd HH}.%i.txt</fileNamePattern>
<maxFileSize>5GB</maxFileSize>
<!-- keep 30 days' worth of history -->
<!-- <maxHistory>30</maxHistory>
<totalSizeCap>20MB</totalSizeCap>-->
</rollingPolicy>
</appender>
<logger name="javaportreader" level="INFO" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<logger name="application" level="DEBUG" additivity="false">
<appender-ref ref="APPLICATION"/>
</logger>
<!-- By default, the level of the root level is set to DEBUG -->
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
<root level="INFO">
<appender-ref ref="APPLICATION"/>
</root>
</configuration>