假设我使用Quartz-Scheduler安排了2个作业
截至目前,两个作业的日志输出都转储在同一个日志文件中。我想将这两个作业的输出记录到两个不同的文件
在一天结束时如此有效,我希望有3个不同的日志文件
谢谢
答案 0 :(得分:3)
如果可以选择切换为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>
它将“正常工作”。
答案 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
就是这样。