假设我用 Quartz-Scheduler 安排了 2 个作业
- 工作 1
- 工作2
到目前为止,两个作业的日志输出都转储到同一个日志文件中。我想将这两个作业的输出记录到两个不同的文件中
- 日志文件-job1.txt
- 日志文件-job2.txt
在一天结束时如此有效,我想拥有 3 个不同的日志文件
- Quartz-Scheduler(主线程日志文件,单独)
- jogfile-job1.txt(单独的日志文件)
- jogfile-job2.txt(单独的日志文件)
谢谢
最佳答案
如果切换到 logback是一个选项,所有你需要的是内置的:MDC和 sifting appenders .首先将这个 try-finally 子句添加到您的每个作业中(您可以使用作业监听器来避免重复):
public void execute(JobExecutionContext context) {
MDC.put("jobId", "job1");
try {
//do all the work here
} finally {
MDC.remove("jobId");
}
}
重要的是将所有代码放在 try
中,而不是之前或之后。准备好作业后,将其放入 logback.xml
:
<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<key>jobId</key>
<defaultValue>unknown</defaultValue>
</discriminator>
<sift>
<appender name="FILE-${jobId}" class="ch.qos.logback.core.FileAppender">
<file>logfile-${jobId}.log</file>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d [%thread] %level %mdc %logger{35} - %msg%n</pattern>
</layout>
</appender>
</sift>
</appender>
它将“正常工作”。
关于java - quartz 调度器 : Log output of separate jobs to different log files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14353285/