Quartz Scheduler:将单独作业的日志输出记录到不同的日志文件中

时间:2013-01-16 07:29:12

标签: java logging log4j quartz-scheduler

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

  • Job1
  • 作业2

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

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

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

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

2 个答案:

答案 0 :(得分:3)

如果可以选择切换为,则只需内置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>

它将“正常工作”。

答案 1 :(得分:0)

您可以拥有两个log4j属性文件并按此配置

public class Job1 {
    static Logger log = Logger.getLogger(Job1.class);
    Job1() {
        PropertyConfigurator.configure("log4j.properties");
        log.info("Job1 initilized");
    }
}

public class Job2 {
    static Logger log = Logger.getLogger(Job2.class);
    Job2() {
        PropertyConfigurator.configure("log4j1.properties");
        log.info("Job2 initilized");
    }
}

在log4j.properties中指定log4j.appender.R.File=logfile-job1.log和log4j1.properties指定log4j.appender.R.File=logfile-job2.log就是这样。