1

Quartz-Schedulerで2つのジョブがスケジュールされているとします。

  • Job1
  • Job2

現在、両方のジョブのログ出力は同じログファイルにダンプされています。これら2つのジョブの出力を2つの異なるファイルに記録したい

  • logfile-job1.txt
  • logfile-job2.txt

結局のところ、効果的に3つの異なるログファイルが必要です。

  1. Quartz-Scheduler(メインスレッドログファイル、個別)
  2. jogfile-job1.txt(別のログファイル)
  3. jogfile-job2.txt(別のログファイル)

ありがとうございました

4

2 に答える 2

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>

それは「うまくいく」でしょう。

于 2013-01-16T19:26:32.103 に答える
0

2 つの 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

于 2013-01-16T09:00:46.933 に答える