java - logback 中的 MaxBackupIndex

标签 java logging log4j logback slf4j

我有一个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然后尝试设置 minIndexmaxIndex但这些配置属性在 TimeBasedRollingPolicy 上不可用,相反,它们是 FixedWindowRollingPolicy 的属性.

请参阅 TimeBasedRollingPolicy 的文档和 FixedWindowRollingPolicy .

以下是一些示例:

  • 以下附加程序定义将导致 Calzada.log滚动至ATrackAT1Handler.%i.log每次Calzada.log达到10KB,Logback 将最多保留10 个历史文件,即 ATrackAT1Handler.1.logATrackAT1Handler.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.logATrackAT1Handler.2017-09-06.20.log然后第二天你就可以有ATrackAT1Handler.2017-09-07.0.logATrackAT1Handler.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/

相关文章:

java - IBM MQ V6.0 是否设置 JMSXDeliveryCount 属性?

java - 是否有允许从多个 VM 访问的 Java 进程内数据库?

java - 将 JButton 添加到滚动 Pane

java - 如何使用 StringUtils.substringsBetween();?

ruby-on-rails - rails,开发模式下的记录器 : console vs logfile

multithreading - Qt5 : How to use qDebug() to log in a file, 多线程应用

javascript - console.log 是如何工作的?

java - 使用 log4j.xml 时出现 log4j 警告消息

logging - Groovy - 根据环境配置日志记录属性

java - log4j2记录数据库varchar2错误