创建每个在logback中运行的新日志文件?

时间:2014-09-15 08:56:13

标签: java logback

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

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

很遗憾,我在这里看不到合适的政策和/或触发器: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.StartupTimeBasedTriggeringPolicy从未被调用过。我把断点放在start()方法中,但它从未提出过。

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

另外,我不明白参数filefilenamePattern应该如何共存。

更新2

我已修复UPDATE 1课程参考,但仍然没有我需要的东西。在给定的解决方案中,日期时间将插入OLD日志文件名中。例如,如果我在2013年运行程序,则会创建routine.log。然后我等了一年并在2014年运行程序。将创建新的日志文件并且名称为routine.log,而OLD 2013日志将被放入routine2014XXXXXXXXXX.log,这绝对不相关。

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

2 个答案:

答案 0 :(得分:11)

以下配置将在每次运行程序时创建新的日志文件和控制台输出,请注意它不使用RollingFileAppender。有关更多信息,请参阅logback文档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>

答案 1 :(得分:0)

如果您想继续使用RollingFileAppender,则可以创建自己的TriggeringPolicy,它将始终在首次调用时触发新日志文件的生成。

@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;
    }
}

然后您可以在triggeringPolicy的{​​{1}}配置中设置logback.xml属性:

<appender>