logback 中的 MaxBackupIndex
MaxBackupIndex in logback
我有一个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 and FixedWindowRollingPolicy 的文档。
这里有一些例子:
以下 appender 定义将导致 Calzada.log
每次 Calzada.log
达到 10KB 时滚动到 ATrackAT1Handler.%i.log
并且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>
以下 appender 定义将导致 Calzada.log
每次 Calzada.log
达到 10KB 时滚动到 ATrackAT1Handler.<yyy-MM-dd>.%i.log
并且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
似乎缺少了一块,即我们如何限制所有天的所有文件的总大小?为了填补这个空白,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
获得每日转存并保留 some 通过 ising totalSizeCap
.
控制历史日志文件占用空间
我有一个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 and FixedWindowRollingPolicy 的文档。
这里有一些例子:
以下 appender 定义将导致
Calzada.log
每次Calzada.log
达到 10KB 时滚动到ATrackAT1Handler.%i.log
并且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>
以下 appender 定义将导致
Calzada.log
每次Calzada.log
达到 10KB 时滚动到ATrackAT1Handler.<yyy-MM-dd>.%i.log
并且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
似乎缺少了一块,即我们如何限制所有天的所有文件的总大小?为了填补这个空白,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
获得每日转存并保留 some 通过 ising totalSizeCap
.