在停止 tomcat 服务器之前,无法删除 logback SiftingAppender 生成的日志文件
logback SiftingAppender generated log files cannot be deleted untill stop the tomcat server
我们正在使用 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 以释放资源?
此致,
马玉兰
以下是我问这个问题时支持组里logback支持的建议。
Mayuran,
You can add FINALIZE_SESSION_MARKER to the MDC to trigger the
sub-appender to be cleaned up. This is documented in
http://logback.qos.ch/manual/appenders.html
Once you do that the sub-appender goes into lingering state for 10
seconds, then the appender will be closed after that.
Dave
我们正在使用 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 以释放资源?
此致,
马玉兰
以下是我问这个问题时支持组里logback支持的建议。
Mayuran,
You can add FINALIZE_SESSION_MARKER to the MDC to trigger the sub-appender to be cleaned up. This is documented in http://logback.qos.ch/manual/appenders.html
Once you do that the sub-appender goes into lingering state for 10 seconds, then the appender will be closed after that.
Dave