我有一个java项目
我使用 Logback 作为日志记录框架而不是 log4j 项目。
Logback 的架构足够通用,可以应用于不同的情况。
我有这个 logback.xml
文件,预计同时不超过 10 个日志文件,但事实并非如此
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="DEV_HOME" value="" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</layout>
</appender>
<appender name="FILE-AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>Calzada.log</file>
<encoder>
<pattern>%d{"yyyy-MM-dd HH:mm"} [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>ATrackAT1Handler.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
<maxHistory>10</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10KB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>CalzadaError.log</file>
<encoder>
<pattern>%d{"yyyy-MM-dd HH:mm"} [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>ATrackAT1HandlerError.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10KB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<logger name="com.calzada" level="debug"
additivity="false">
<appender-ref ref="FILE-AUDIT" />
<appender-ref ref="STDOUT" />
</logger>
<root level="error">
<appender-ref ref="FILE-ERROR" />
</root>
</configuration>
最佳答案
我认为您的配置混淆了 Logback 策略。
在您的配置中使用:TimeBasedRollingPolicy
然后尝试设置 minIndex
和maxIndex
但这些配置属性在 TimeBasedRollingPolicy
上不可用,相反,它们是 FixedWindowRollingPolicy
的属性.
请参阅 TimeBasedRollingPolicy 的文档和 FixedWindowRollingPolicy .
以下是一些示例:
以下附加程序定义将导致
Calzada.log
滚动至ATrackAT1Handler.%i.log
每次Calzada.log
达到10KB,Logback 将最多保留10 个历史文件,即ATrackAT1Handler.1.log
至ATrackAT1Handler.10.log
<appender name="FILE-AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>Calzada.log</file> <encoder> <pattern>%d{"yyyy-MM-dd HH:mm"} [%thread] %-5level %logger{35} - %msg%n</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <fileNamePattern>ATrackAT1Handler.%i.log</fileNamePattern> <minIndex>1</minIndex> <maxIndex>10</maxIndex> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>10KB</maxFileSize> </triggeringPolicy> </appender>
以下附加程序定义将导致
Calzada.log
滚动至ATrackAT1Handler.<yyy-MM-dd>.%i.log
每次Calzada.log
达到10KB,Logback 将保留最多10 天的历史日志文件,但是(这是一个重要的区别)Logback 将滚动的文件数量没有上限每天。所以,你可以有ATrackAT1Handler.2017-09-06.0.log
至ATrackAT1Handler.2017-09-06.20.log
然后第二天你就可以有ATrackAT1Handler.2017-09-07.0.log
至ATrackAT1Handler.2017-09-07.12.log
等等<appender name="FILE-AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>Calzada.log</file> <encoder> <pattern>%d{"yyyy-MM-dd HH:mm"} [%thread] %-5level %logger{35} - %msg%n</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>ATrackAT1Handler.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxFileSize>10KB</maxFileSize> <maxHistory>10</maxHistory> </rollingPolicy> </appender>
所以,FixedWindowRollingPolicy
允许您控制历史文件的数量和大小,而 TimeBasedRollingPolicy
允许您控制历史文件的天数和每个文件的大小。 TimeBasedRollingPolicy
似乎缺少一 block ,即我们如何限制全天所有文件的总大小?为了填补这一空白TimeBasedRollingPolicy
提供配置属性:totalSizeCap
。来自文档:
totalSizeCap int
The optional totalSizeCap property controls the total size of all archive files. Oldest archives are deleted asynchronously when the total size cap is exceeded. The totalSizeCap property requires maxHistory property to be set as well. Moreover, the "max history" restriction is always applied first and the "total size cap" restriction applied second.
所以,你可以选择 FixedWindowRollingPolicy
您将限制文件数量,但不会进行每日滚动或使用 TimeBasedRollingPolicy
通过 ising totalSizeCap
获得每日滚动并保留对历史日志文件占用空间的一些控制.
关于java - logback 中的 MaxBackupIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46078774/