Java 在停止tomcat服务器之前,无法删除logback筛选Appender生成的日志文件

Java 在停止tomcat服务器之前,无法删除logback筛选Appender生成的日志文件,java,file-io,logback,tomcat8,Java,File Io,Logback,Tomcat8,我们使用logback“SiftingAppender”根据日期和其他信息(如周期)生成日志文件(每个日期可以有多个周期) 以下是示例日志文件名 20150515_1_Job1.log 20150515_2_Job1.log 对于上面的场景,我们使用以下回显配置 <appender name="BATCH_LOGGER_APPENDER" class="ch.qos.logback.classic.sift.SiftingAppender"> <discriminato

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

以下是示例日志文件名

20150515_1_Job1.log
20150515_2_Job1.log

对于上面的场景,我们使用以下回显配置

<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>
我们还有一些其他的工作来管理旧的日志文件,保留期为2天(两天的旧文件将被移动到另一个位置)

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

所有作业都部署在ApacheTomcat8服务器的单个war文件中

有人能建议如何在日志记录完成后强制执行logback以释放资源吗

问候,

Mayuran

以下是我问这个问题时,there支持小组的logback支持人员提出的建议

马尤兰

您可以将FINALIZE_SESSION_标记添加到MDC以触发 待清理的子附件。这记录在

一旦这样做,子追加器将进入延迟状态10分钟 秒后,追加器将关闭

戴夫


您可以复制一个截断原始文件(在linux上),如果该文件仍然是OPEN,则可以工作
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");
}