logback SiftingAppender生成的日志文件只有在停止tomcat服务器后才能删除



我们使用logback "SiftingAppender"根据日期和其他信息(如周期)生成日志文件(每个日期可以有多个周期)。

以下是日志文件名示例

20150515 _1_job1.log
20150515 _2_job1.log

对于上述场景,我们使用以下logback配置。

<appender name="BATCH_LOGGER_APPENDER" class="ch.qos.logback.classic.sift.SiftingAppender">
    <discriminator>
        <key>batchLoggerFileName</key>
        <defaultValue>unknown</defaultValue>
    </discriminator>
    <sift>
        <appender class="ch.qos.logback.core.FileAppender">
            <file>${batchlog.dir}/${batchLoggerFileName}.log</file>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%d{yyyy-MM-dd_HH:mm:ss.SSS} | %-5level | [%thread] | %msg%n%rEx</pattern>
            </layout>
        </appender>
    </sift>
</appender>
<logger name="BATCH_LOGGER" level="INFO" additivity="false">
    <appender-ref ref="BATCH_LOGGER_APPENDER"></appender-ref>
</logger>

下面是将详细信息记录到特定日志文件的java代码。

private static final Logger BATCH_LOGGER = LoggerFactory
        .getLogger("BATCH_LOGGER");
public void info(JobInfo jobInfo, String message) {
    MDC.put("batchLoggerFileName", jobInfo.getJobId());
    BATCH_LOGGER.info(message);
    MDC.remove("batchLoggerFileName");
}

我们有一些其他的作业来做旧日志文件的管理,保留2天(两天的旧文件将被移动到另一个位置)。

但是即使在作业完成后,我们也无法移动文件。我们怀疑logback占用了资源,不允许文件移动或删除。

所有的作业都部署在apache tomcat 8服务器的一个war文件中。

谁能建议如何强制logback在日志记录完成后释放资源?

问候,
Mayuran

当我提出这个问题时,他们的支持小组中的logback支持人员给出了以下建议。

Mayuran,

您可以将FINALIZE_SESSION_MARKER添加到MDC中以触发要清理的子追加程序。这在http://logback.qos.ch/manual/appenders.html

一旦你这么做了,子追加器将进入停留状态10秒后,追加器将关闭。

戴夫

相关内容

最新更新