java - quartz 调度器 : Log output of separate jobs to different log files

标签 java logging log4j quartz-scheduler

假设我用 Quartz-Scheduler 安排了 2 个作业

  • 工作 1
  • 工作2

到目前为止,两个作业的日志输出都转储到同一个日志文件中。我想将这两个作业的输出记录到两个不同的文件中

  • 日志文件-job1.txt
  • 日志文件-job2.txt

在一天结束时如此有效,我想拥有 3 个不同的日志文件

  1. Quartz-Scheduler(主线程日志文件,单独)
  2. jogfile-job1.txt(单独的日志文件)
  3. jogfile-job2.txt(单独的日志文件)

谢谢

最佳答案

如果切换到 是一个选项,所有你需要的是内置的:MDCsifting 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/

相关文章:

javascript - JxBrowser onScriptContextCreated 未被调用

Java:java.lang.NumberFormatException

javascript 抽象控制台日志记录

c# - 日志记录仅在本地有效,但在部署到 Microsoft Azure 应用服务时无效

java - 避免对大型日志消息进行字符串连接

java - Log4j2 版本 2.3 中多个 JVM 写入同一日志文件

java - 如何在网络测试 Selenium 期间禁用互联网?网络驱动程序、Java

java - 将字符串传递到输入流

java - Log4j:如何为 Logger 使用自定义名称?

java - 首次运行项目时未生成 Log4j 日志文件