我有一个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>
答案 0 :(得分:3)
我认为您的配置混合了Logback策略。
在您的配置中,您使用:TimeBasedRollingPolicy
,然后尝试设置minIndex
和maxIndex
,但这些配置属性在TimeBasedRollingPolicy
上不可用,而是属于FixedWindowRollingPolicy
。
请参阅TimeBasedRollingPolicy和FixedWindowRollingPolicy的文档。
以下是一些例子:
以下appender定义会导致Calzada.log
每次ATrackAT1Handler.%i.log
达到 10KB 时转为Calzada.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
每次ATrackAT1Handler.<yyy-MM-dd>.%i.log
达到 10KB 时转为Calzada.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
可选的totalSizeCap属性控制所有存档文件的总大小。超过总大小上限时,将异步删除最旧的归档。 totalSizeCap属性也需要设置maxHistory属性。而且,&#34;最大历史&#34;始终首先应用限制,并且&#34;总大小上限&#34;限制适用第二。
因此,您可以选择使用FixedWindowRollingPolicy
并限制文件数量,但不会有每日翻转或使用TimeBasedRollingPolicy
获取每日翻转并保留<通过ising totalSizeCap
,某些控制历史日志文件的足迹。