【问题标题】:How to keep rolling log file as per file size?如何根据文件大小保持滚动日志文件?
【发布时间】:2016-02-07 22:00:01
【问题描述】:

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

<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>

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

【问题讨论】:

    标签: java log4j slf4j logback


    【解决方案1】:

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

    您正在指定打算由 RollingFileAppender 使用并被 FileAppender 忽略的设置/属性。

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

    使用 RollingFileAppender 和 ConsoleAppender 的示例 logback.xml。 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>
    

    【讨论】:

    • 感谢您的示例。最后你有root level=DEBUG 这一般是什么意思?而不是DEBUG 如果我做到INFO 那么会发生什么?
    • 将根级别设置为调试意味着默认情况下您希望将所有 log.debug() 调用输出到文件。如果将其设置为 INFO,您将不会在文件中看到 DEBUG 日志语句。在生产环境中,将日志级别提高到 WARN 更高以减少输出的日志记录量是很常见的。我自己通常在生产中使用 INFO 并发现这已经足够了。您可以在配置中添加特定的 元素以“覆盖”默认值:
    • David,我再次调整了示例,为您提供了一个更简单的变体,专注于每天翻转 30 天,文件大小最大为 5Mb。
    • 会每天翻身吗?有什么方法可以在文件限制达到 100MB 时翻转?我的意思是只看文件限制,一旦达到 100MB,只需翻转到下一个文件并保持最多 10 个文件即可。这可能吗?
    • 您可以将&lt;rollingPolicy&gt; 部分更改为固定窗口策略,以便滚动仅基于大小和要保留的文件数的最大设置,由 设置。例如:application-%i.log13
    猜你喜欢
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 2016-03-15
    相关资源
    最近更新 更多