如何使用logback 1.0.0在经过的时间或超出大小的情况下滚动日志?

时间:2012-11-21 14:28:54

标签: spring logback

我希望在经过一分钟或超过1MB大小后滚动日志。但是使用以下配置,仅创建第一个记录大小的日志。让我们说:

myapp.2012-11-21_15-07.log(大小:1026KB - 1MB)
myapp.log(大小:89KB)

让我们说时间过去了(但我们仍然在那一分钟内)并且日志被填满(超过1MB),它不会创建另一个文件。只有在超过时间时才会创建另一个文件,而不考虑大小 这是一个错误还是预期的功能?如何使用logback配置?我需要自定义实现吗?

当我想要在经过一分钟或超过1MB大小后滚动日志时,我在the current manual中读到的内容,我将执行以下配置:

<configuration>

<appender name="file"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${catalina.base}/logs/myapp.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${catalina.base}/logs/myapp.%d{yyyy-MM-dd_HH-mm}.log</fileNamePattern>

        <maxHistory>90</maxHistory>

        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>1MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>

    <encoder>
        <pattern>%-5level %date{ISO8601} [%thread]: [%class: %method] %message%n</pattern>
    </encoder>
</appender>

<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%-5level %date{ISO8601} [%thread]: [%class: %method] %message%n</pattern>
    </encoder>
</appender>
</appender>

<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%-5level %date{ISO8601} [%thread]: [%class: %method] %message%n</pattern>
    </encoder>
</appender>

<logger name="org.springframework.core">
    <level value="all"/>
</logger>

<logger name="org.springframework.beans">
    <level value="all"/>
</logger>

<logger name="org.springframework.context">
    <level value="all"/>
</logger>

<logger name="org.springframework.web">
    <level value="all"/>
</logger>
<root level="error,info,debug">
    <appender-ref ref="file"/>
    <!--   <appender-ref ref="console"/>   -->
</root>
</configuration>

依赖项(我不包括使用它来获取logback功能的每个依赖项中的commons-logging) - 下面没有显示:

    <!-- LOGGING -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.0.0</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.6.6</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.6.6</version>
    </dependency>
    <!--END LOGGING-->

其他一些信息:
我也尝试过1.0.7版本(最后一个虽然不能通过中央存储库提供 - 必须手动将其包含在本地maven存储库中),但同样的情况发生了。
我的项目使用0.9.11版本的logback,我无法设置滚动策略,因为我找不到任何有效的文档/手册。也许有人也可以为那些需要使用遗留依赖项的人指出一些旧的手册。

亲切的问候,

1 个答案:

答案 0 :(得分:1)

您必须将滚动策略设置为使用SizeAndTimeBasedFNATP

以下是带有示例的文档

http://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedFNATP

你错过了%i:

<fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>

除“%d”外,请注意“%i”转换令牌。每当当前日志文件在当前时间段结束之前达到maxFileSize时,它将以增加的索引存档,从0开始。