1

我想在一分钟过去或超过 1MB 大小后滚动日志。但是使用下面的配置,只创建第一个日志并考虑大小。让我们说:

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

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

正如我在当前手册中阅读的那样,当我希望在经过一分钟或超过 1MB 大小后滚动日志时,我将执行以下配置:

<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,我无法设置滚动策略,因为我找不到任何有效的文档/手册。也许有人还可以为那些需要处理遗留依赖项的人指出一些旧手册。

亲切的问候,
暴君

4

1 回答 1

1

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

这是带有示例的文档

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

您缺少 %i:

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

请注意除“%d”之外的“%i”转换标记。每次当前日志文件在当前时间段结束前达到 maxFileSize 时,都会以递增的索引归档,从 0 开始。

于 2012-11-22T08:27:19.393 回答