logback 没有生成新的日志文件

Posted

技术标签:

【中文标题】logback 没有生成新的日志文件【英文标题】:logback not generating new log file 【发布时间】:2020-05-30 03:27:26 【问题描述】:

我在我的 Micronaut 项目中使用下面的 logback.xml,它没有按照 xml 配置中提供的 rollingPolicy 生成新的日志文件。我尝试了 SizeAndTimeBasedRollingPolicy 和 TimeBasedRollingPolicy,但没有成功。

Micronaut 版本:1.2.2

logback-经典:1.2.3

文件:logback.xml

<configuration>

    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>logs/my-app.log</file>
        <encoder>
            <pattern>%cyan(%dyyyy-MM-dd HH:mm:ss.SSS) %gray([%thread]) %highlight(%-5level) %magenta(%logger36):%line- %msg%n</pattern>
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.RollingFileAppender">
            <fileNamePattern>
                logs/my-app.log-%dyyyy-MM-dd-%i.log.gz
            </fileNamePattern>
            <maxHistory>30</maxHistory>
            <totalSizeCap>1MB</totalSizeCap>
        </rollingPolicy>

    </appender>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%cyan(%dyyyy-MM-dd HH:mm:ss.SSS) %gray([%thread]) %highlight(%-5level) %magenta(%logger36):%line- %msg%n</pattern>
        </encoder>
    </appender>

    <root level="ALL">
        <appender-ref ref="FILE" />
        <appender-ref ref="STDOUT" />
    </root>


</configuration>

【问题讨论】:

【参考方案1】:

如果我没记错的话,您的 maxHistory 策略会阻止您构建多个文件。相反,它会删除旧的,并为新的一天或达到 1mb 大小时创建一个新的。

在这种情况下,maxHistory 必须与您所说的 TimeBasedRollingPolicy 结合使用,然后 maxHistory 是几天的参数。如果没有 TimeBasedRollingPolicy,它可能只是文件数。

【讨论】:

在应用程序中,我们已将 maxHistory 设置为 60,为了发布问题,我将其保留为 1,(也已更新问题)目前在服务器上,它仅将所有日志附加到 1 个文件并且文件大小增加以 GB 为单位。【参考方案2】:

根据我自己的 logback 经验,您应该执行以下操作:

<appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
...
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <fileNamePattern>logs/my-app.log-%dyyyy-MM-dd-%i.log.gz</fileNamePattern>
    </rollingPolicy>
    <triggeringPolicy
            class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <MaxFileSize>1MB</MaxFileSize>
    </triggeringPolicy>
...
</appender>

目前,您正在使用“RollingFileAppender”作为策略,因此无法正常工作。

【讨论】:

感谢 Orcen,不幸的是它也不适合我。 :( 您是否尝试在您的用例中使用&lt;maxFileSize&gt;1MB&lt;/maxFileSize&gt; 而不是&lt;totalSizeCap&gt;1MB&lt;/totalSizeCap&gt;?实际上,totalSizeCap 是说您将在所有日志文件中仅保留 1MB 的日志。此外,您可以将 SizeBasedRollingPolicy 用于您的 rollingPolicy 并使用 RollingFileAppender 用于您的 appender。来源:logback.qos.ch/manual/appenders.html

以上是关于logback 没有生成新的日志文件的主要内容,如果未能解决你的问题,请参考以下文章

spring boot logback日志logback 生成日志文件在本项目下,而不在指定的日志文件目录下/指定日志文件到达最大值后不按照配置进行切割

logback 正在被占用日志文件被删除后,怎么自动生成相同日志文件?

logback不生成日志文件问题

logback中配置的日志文件的生成地址

Spring Boot配置保存日志文件

springboot 将logback日志根据不同类输入到不同路径下2(含sql)