在 logback 中每次运行时都创建新的日志文件?

2022-09-04 20:54:27

如何在每次应用程序运行时创建新的日志文件?

我想以任何方式保留以前的日志。例如,我更喜欢按时间和日期命名每个新日志文件的创建日期。否则,我同意将旧的日志文件备份到日期和时间文件名中。

很抱歉,我在这里看不到适当的策略和/或触发器:http://logback.qos.ch/manual/appenders.html

更新

我大约按照“副本”所说

    <appender name="ROUTINEAPPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/routine.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/routine%d{yyyyMMdd}%d{HHmmss,aux}.log</fileNamePattern>
            <TimeBasedFileNamingAndTriggeringPolicy class="com.inthemoon.toolkit.StartupTimeBasedTriggeringPolicy" />
        </rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} - %C{0} - %msg%n</pattern>
        </encoder>
    </appender>

但我的班级从不被叫到。我在方法中放置了断点,但它从未出现过。com.inthemoon.toolkit.StartupTimeBasedTriggeringPolicystart()

此外,不会发生滚动。日志文件已创建,但它始终具有名称 。routine.log

我也不明白,参数和应该如何共存。filefilenamePattern

更新 2

我有固定的类引用,但仍然没有我需要的东西。在给定的解决方案中,日期时间插入到旧日志文件名中。例如,如果我在2013年运行程序,它创建了.然后我等了一年,在2014年运行程序。新的日志文件将被创建并具有名称,而旧的2013日志将被放入,这是绝对无关紧要的。UPDATE 1routine.logroutine.logroutine2014XXXXXXXXXX.log

每次程序启动时,我都需要创建新文件,并使用此文件标记日期时间戳。


答案 1

每次程序运行时,以下配置将创建一个新的日志文件和控制台输出,请注意,它不使用RollingFileAppender。有关更多信息,请参阅日志文档 https://logback.qos.ch/manual/configuration.html

<configuration>
    <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</Pattern>
        </layout>
    </appender>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>logfile-${bySecond}.txt</file>
        <append>true</append>
        <encoder>
            <Pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</Pattern>
        </encoder>
    </appender>
    <root level="info" additivity="false">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"></appender-ref>
    </root>
</configuration>

答案 2

如果你想继续使用,你可以创建自己的,这将始终触发一个新的日志文件,以便在第一次调用时生成。RollingFileAppenderTriggeringPolicy

@NoAutoStart
public class StartupTriggeringPolicy<E> extends TriggeringPolicyBase<E> {
    private boolean triggerRollover = true;

    @Override
    public boolean isTriggeringEvent(final File activeFile, final E event) {
        if (!triggerRollover) { return false; }
        triggerRollover = false;
        return true;
    }
}

然后,您可以在 的配置中设置该属性:triggeringPolicylogback.xml<appender>

<appender name="startupRolloverAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <triggeringPolicy class="com.your.package.StartupTriggeringPolicy"/>
    <!-- other configurations -->
</appender>

推荐