如何根据文件大小保留滚动日志文件?

2022-09-04 21:22:11

我正在处理一个项目,其中我在文件中记录了一堆东西,我想确保一旦达到文件的固定限制,我的日志文件就会被滚动。我有一个下面的文件,但看起来文件大小不起作用。我看到我的文件大小为793M,但我的限制是100Mlogback.xml

<configuration>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>process.log</file>
        <triggeringPolicy
            class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>100MB</maxFileSize>
        </triggeringPolicy>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>process%i.log</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>9</maxIndex>
        </rollingPolicy>
        <encoder>
            <pattern>%date %level [%thread] %msg%n</pattern>
            <!-- this improves logging throughput -->
            <immediateFlush>true</immediateFlush>
        </encoder>
    </appender>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder 
            by default -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
            </pattern>
        </encoder>
    </appender>

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

我在这里做错了什么?另外,在日志记录方面,我们在生产中应该遵循的最佳策略是什么?我们正在一个文件中记录一堆东西,我们不想用这个日志文件填满磁盘。


答案 1

您应该使用RollingFileAppender而不是FileAppender。请参见: http://logback.qos.ch/manual/appenders.html

您正在指定的设置/属性旨在由 RollingFileAppender 使用,但被 FileAppender 忽略。

有关用法和配置的良好示例,请参阅此链接:http://examples.javacodegeeks.com/enterprise-java/logback/logback-rollingfileappender-example/

示例日志.xml使用 RollingFileAppender 和 ConsoleAppender。RollingFileAppender 既基于大小又基于时间:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="true">
        <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <charset>UTF-8</charset>
                <Pattern>%d %-4relative [%thread] %-5level %logger{35} - %msg%n</Pattern>
            </encoder>
        </appender>

        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>/srv/logs/application.log</file>

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
                <maxHistory>30</maxHistory> 
            </rollingPolicy>

            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <maxFileSize>5MB</maxFileSize>
            </triggeringPolicy>

            <encoder>
                <charset>UTF-8</charset>
                <pattern>%d %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
            </encoder>
        </appender>

        <root level="DEBUG">
            <appender-ref ref="consoleAppender" />
            <appender-ref ref="FILE"/>
        </root>
    </configuration>

答案 2

推荐