반응형

https://myhappyman.tistory.com/138

 

JAVA - Maven 프로젝트에서 스케줄러 구성하기(Quartz) - 1

고객사의 요청으로 일정시간마다 특정 DB에서 데이터를 가져오고 넣어주는 작업이 필요했습니다. 일정시간마다 동작이 필요하다보니 자바로 스케줄러를 구성하게 되었고 Quartz 를 사용하여 구��

myhappyman.tistory.com

 

1장에 이어 이번엔 스케줄러에 로그처리를 위해 log4j 설정을 진행해보겠습니다.

 

로그는 실제로 서버나 프로세스를 운용을 하면서 많은 정보를 남겨두어 버그나 문제가 발생하였을때, 원인을 분석할 수 있는 아주 유용한 정보가 될 수 있기에 설정과 처리에 따라 아주 유용한 데이터가 될 수도 있지만, 필요없는 모든 출력문구를 다 찍게해놓으면 분석도 힘들뿐더러 용량만 잔득 차지하는 데이터가 될 수도 있습니다.

 

 

로그 설정(log4j)

pom.xml

<!-- log4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

먼저 log4j를 추가합니다.

 

log4j.properties

log4j에 사용할 설정파일을 java디렉토리에 생성하고 설정합니다.(패키지 안에 생성이 아닙니다.)

# Root logger option

#log4j.rootLogger=debug, stdout, logfile
log4j.rootLogger=info, stdout, logfile

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p (%C{2}:%L) - %m%n

# Direct log message to log file
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd
log4j.appender.logfile.File=C:/test/scheduler.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %5p (%C{2} - %M:%L) - %m%n
log4j.appender.logfile.Append=true

많은 옵션들 중에 log4j.appender.logfile.File 부분에 시스템에 출력할 위치를 지정합니다.

 

저는 C드라이브/test디렉토리에 출력되도록 설정하였습니다.

이후 App.java에 log를 찍어봅니다.

 

App.java

import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;

import org.apache.log4j.Logger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;

import com.psw.exScheduler.scheduler.SchedulerTest;


public class App {
    private static final Logger logger = Logger.getLogger(App.class);

    public static void main(String[] args) {
        logger.info("Applcation Start!!!");

        // SchedulerFactory Create
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        try {
            Scheduler scheduler = schedulerFactory.getScheduler();

            JobDetail job = newJob(SchedulerTest.class)
                    .withIdentity("jobName", Scheduler.DEFAULT_GROUP)
                    .build();

            // 5 seconds action
            Trigger trigger = newTrigger()
                    .withIdentity("trggerName", Scheduler.DEFAULT_GROUP)
                    .withSchedule(cronSchedule("0/5 * * * * ?"))
                    .build();

            scheduler.scheduleJob(job, trigger);
            scheduler.start();
        } catch (Exception e) {
            logger.error(e);
        }
    }
}

이클립스 콘솔창에 정상적으로 출력되는 모습을 볼 수 있습니다.

 

 

해당 디렉토리에도 log파일이 생성되었고 열어보면 이클립스 콘솔창에 찍었던 로그가 정상적으로 쌓인 모습을 볼 수 있습니다.

반응형