仅对文件大小进行日志回滚

Jos*_*osh 4 java logback

我正在使用logback 1.0.13.我希望我的日志文件完全基于文件大小滚动.如果这需要2个小时或2年,我不在乎.我无法弄清楚如何这样做.我的appender配置如下:

<appender name="serverFaultFile"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>/folder/to/log/file.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>/folder/to/log/file-%d{yyyy-MM}.%i.log</fileNamePattern>
        <MaxHistory>2</MaxHistory>
        <cleanHistoryOnStart>true</cleanHistoryOnStart>
        <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
            <MaxHistory>9</MaxHistory>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <encoder>
        <pattern>[%p] [%d{ISO8601}] [%c] [%m]%n</pattern>
    </encoder>
</appender>
Run Code Online (Sandbox Code Playgroud)

这个解决方案每月滚动,这不是我需要的.我尝试完全删除 - %d {dateformat}修饰符,但后来甚至都没有创建/记录该文件.我尝试了修改器%G和%yyyy,但是每月都是精细的,因为logback显然可以让我得到(参见这个错误报告).我错过了什么?

she*_*tem 8

您需要SizeBasedTriggeringPolicy:http://logback.qos.ch/manual/appenders.html#SizeBasedTriggeringPolicy ,可能与FixedWindowRollingPolicy结合使用.

以前是评论,不确定它应该得到它自己的答案,但在这里.;)

  • 值得有自己的答案...谢谢。但我最初的实验表明,正如您所暗示的,它不适用于“SizeAndTimeBasedRollingPolicy”...这并不奇怪,而且我必须阅读“FixedWindowRollingPolicy”(到底为什么它被称为我想知道吗?)... (2认同)

mik*_*ent 6

只是为了扩展sheltem的答案:

根据我的实验,您必须同时使用a FixedWindowRollingPolicy和a SizedBasedTriggeringPolicy,如此处所述。看来您不能将a SizedBasedTriggeringPolicy与一起使用SizeAndTimeBasedRollingPolicy,例如:在我的情况下,登录失败。

xml文件中的典型示例可能是:

<appender name="FILE"
    class="ch.qos.logback.core.rolling.RollingFileAppender">

    <file>../logs/MyProject/testrolling.html</file>

    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <fileNamePattern>../logs/MyProject/backup%i.htm
        </fileNamePattern>
        <minIndex>1</minIndex>
        <maxIndex>10</maxIndex>
    </rollingPolicy>
    <triggeringPolicy
        class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>5MB</maxFileSize>
    </triggeringPolicy>

    <encoder class="...
Run Code Online (Sandbox Code Playgroud)

您的备份文件将被称为:backup1.htm,backup2.htm等。

似乎您不能在“:d”中包含“%d”格式指令,但fileNamePattern我尝试了并且记录失败。但是,根据文档,您必须包括“%i”格式指令,这很有意义。

很久以后

这可能是我太幼稚,但我认为日志记录应用程序应设计为默认情况下产生输出,即始终解释指令,以便至少产生某种东西,而不是什么都不产生。