首页 > 解决方案 > LOGBACK - 根据大小滚动文件,然后在一天结束时将所有文件一起滚动到压缩文件夹中

问题描述

我有一个要求,我必须根据以下要求滚动文件:

  1. 当文件达到 1 KB 的限制时滚动文件(仅将 1 KB 用于测试目的)。例如:log.1.txt、log.2.txt。一天可能有多个。
  2. 滚动当天创建的所有文件并压缩它们(以gz格式)。所以基本上log.1.txt、log.2.txt都会以logs.json.date.gz格式存储。

但在探索之后,我觉得这是不可能的,因为它可能需要 2 个触发策略。

下面是我的代码片段:

<appender name="jsonAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>log/logs.json</file>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>INFO</level>
    </filter>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>log/logs.json.%d{yyyy-MM-dd-HH-mm}.gz</fileNamePattern>
        <maxHistory>2</maxHistory>
    </rollingPolicy>

    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>1KB</maxFileSize>
    </triggeringPolicy>

    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
            <jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
                <prettyPrint>true</prettyPrint>
            </jsonFormatter>
            <timestampFormat>yyyy-MM-dd' 'HH:mm:ss.SSS</timestampFormat>
        </layout>
    </encoder>
</appender>

对于所有的logback专家,如果我的理解正确,请指导我。这种情况是否可能。

更新:这个问题与此处发布的其他问题不同。我想根据大小滚动文件的大小。然后在午夜将它们一起滚动到一个公共文件夹中,这将通过基于时间的滚动来完成。

所以我不想要 log19august.01.gz 和 log19august.02.gz。我希望 log.01 和 log.02 在 log19august.gz 下。

所以这不是一个重复的问题,因为它需要基于大小和时间的滚动,但在不同的情况下。

标签: javaspring-bootlogginglogback

解决方案


推荐阅读