[java] Quartz Scheduler에서 작업 로그 기록하기

Quartz Scheduler는 자바 기반의 오픈 소스 작업 스케줄러로써, 다양한 작업을 예약하고 실행할 수 있습니다. 이번 글에서는 Quartz Scheduler에서 작업을 실행할 때 발생하는 로그를 기록하는 방법에 대해 알아보겠습니다.

1. 로그 라이브러리 설정

먼저, 로그 라이브러리를 설정해야 합니다. 일반적으로 자바 프로젝트에서는 Log4j나 SLF4J와 같은 로그 라이브러리를 사용하며, 여기에서도 Log4j를 예시로 설명하겠습니다.

Maven을 사용하는 경우, pom.xml 파일에 다음과 같이 의존성을 추가합니다:

<dependencies>
    <!-- other dependencies -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.14.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.14.1</version>
    </dependency>
</dependencies>

해당 로그 라이브러리의 버전은 프로젝트에 맞게 설정하시면 됩니다.

2. 로그 설정 파일 작성

다음으로, 로그 설정 파일을 작성해야 합니다. Log4j의 경우, log4j2.xml 파일을 프로젝트의 리소스 디렉터리에 추가합니다.

아래는 간단한 log4j2.xml 파일의 예시입니다:

<Configuration status="warn">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="com.yourpackage" level="info" additivity="false">
            <AppenderRef ref="Console" />
        </Logger>
        <Root level="error">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

위 설정에서는 콘솔로 로그를 출력하도록 설정하였습니다.

3. Quartz 작업 클래스 작성

Quartz Scheduler에서 실행될 작업 클래스를 작성합니다. 작업 클래스에서 로그를 기록하기 위해서는 로거를 초기화하고 사용해야 합니다.

예시로, 작업 클래스에 다음과 같은 코드를 추가합니다:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class MyJob implements Job {
    
    private static final Logger logger = LogManager.getLogger(MyJob.class);
    
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        logger.info("작업이 실행되었습니다.");
        
        // 작업 로직을 추가합니다.
        
        logger.info("작업이 완료되었습니다.");
    }
}

위 코드에서는 org.apache.logging.log4j.LogManager 클래스의 getLogger 메서드를 사용하여 로거를 초기화하고, 작업 클래스 내에서 logger 객체를 사용하여 로그를 기록합니다.

4. Quartz Scheduler 설정

마지막으로 Quartz Scheduler를 설정합니다. Quartz Scheduler를 설정하는 방법은 프로젝트의 요구사항에 따라 다를 수 있으며, 이를 다루는 것은 이번 글의 범위를 벗어납니다. 여기에서는 간단한 예제를 제공하겠습니다.

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class SchedulerExample {
    
    public static void main(String[] args) {
        try {
            // 스케줄러 팩토리를 초기화합니다.
            StdSchedulerFactory schedulerFactory = new StdSchedulerFactory();
            Scheduler scheduler = schedulerFactory.getScheduler();
            
            // 작업을 생성합니다.
            JobDetail job = JobBuilder.newJob(MyJob.class)
                    .withIdentity("myJob", "group1")
                    .build();
            
            // 트리거를 생성합니다.
            Trigger trigger = TriggerBuilder.newTrigger()
                    .withIdentity("myTrigger", "group1")
                    .startNow()
                    .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                            .withIntervalInSeconds(10)
                            .repeatForever())
                    .build();
            
            // 작업과 트리거를 스케줄러에 등록합니다.
            scheduler.scheduleJob(job, trigger);
            
            // 스케줄러를 시작합니다.
            scheduler.start();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
}

위 예제에서는 JobBuilderTriggerBuilder를 사용하여 작업과 트리거를 생성하고, 스케줄러에 등록한 뒤 시작합니다.

마무리

이렇게 작성된 코드에서는 Quartz Scheduler에서 작업을 실행할 때마다 해당 작업의 로그가 기록됩니다. 로그 레벨을 설정하거나 다양한 로그 출력 옵션을 사용하여 필요에 맞게 수정할 수 있습니다.