JVM/Java

[Java] 개발자라면 꼭 필요한 로그관리! Logger 사용 및 log4j2.xml 설정 방법

헹창 2019. 6. 22.
반응형

개발자라면 꼭 필요한 로그관리, 사용방법과 설정방법을 함께 뽀개보자 !

 

사용 방법

먼저 사용방법은 간단하다.

로깅 라이브러리는 slf4j 을 사용하여 내가 로그를 남길 클래스에 선언을 해주고 메소드 내에서 사용하면 된다.

 

public class MainController(){
    private final Logger LOGGER = LoggerFactory.getLogger(MainController.class.getName());
    
    public void moveMainPage(){
        LOGGER.info("Hello world!");
    }
}

 

그럼 다음과 같이 콘솔창에 찍힐 것이다.

 

LOGGER.info("Hello world!")

참고로 로그 레벨은 TRACE > DEBUG > INFO > WARN > ERROR 이다.

 

자바를 처음 시작했을 때 System.out.println("Hello world!");  을 사용해서 'Hello world!' 는 모두 출력해봤을거다.

System.out.println 에 익숙한 사람들에게는 logger를 굳이 써야할 필요를 못느낄 수 있다.

 

System.out.println("Hello world!")

 

하지만 위 콘솔에 출력된 것을 보면 차이를 확실히 알 수 있을거다.

System.out으로 로그를 찍을 경우 에러발생 시 추적할 수 있는 최소한의 정보가 없다.

 

단순히 로깅을 떠나 협업하는 개발자들을 위해 System.out은 지양하고 로깅 라이브러리를 사용해야 할 필요가 있다.

 

 

설정 방법

그렇다면 로그 설정은 어떻게 하는가 ?

 

 

 

log4j2.xml을 생성한 후 내가 로그를 찍을 클래스의 경로를 다음과 같이 입력하면 된다.

 

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d %5p [%c] %m%n" />
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="egovframework.ECALL_O.main.web" level="INFO" additivity="FALSE">
            <AppenderRef ref="console" />
        </Logger>
    </Loggers>
</Configuration>
 

 

 

추가로 로그 파일을 저장하기 위한 경로 설정과 파일이름 설정하는 부분이다.

 

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <properties>
        <property name="name">n_mo</property>
        <property name="pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} || %msg%n</property>
        <property name="path">c:/logs</property>
    </properties>
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="${pattern}"/>
        </Console>
        <!-- 로그파일 남길시 사용 -->
        <RollingFile name="file" 
                     fileName="${path}/${name}.log"
                     filePattern="${path}/${name}_%d{yyyyMMdd}.log">
            <PatternLayout>
                <pattern>${pattern}</pattern>
            </PatternLayout>
            <Policies>
                    <TimeBasedTriggeringPolicy/><!-- Rotated everyday -->
            </Policies>     
        </RollingFile>
   </Appenders>
    <Loggers>
        <Logger name="egovframework.ECALL_O.main.web" level="INFO" additivity="FALSE">
            <AppenderRef ref="console" />
        </Logger>
    </Loggers>
</Configuration>
 

 

Line 15. filePattern 을 보면 {yyyyMMdd} 는 일자별 로그파일 저장기간을 설정한 것으로

          하루가 지나면 c:/logs 폴더에 n_mo_20190601.log 라는 파일 이름으로 저장이 되는 것이다.

 

         만약, filePattern에서 {yyyyMMddHH} 로 설정했다면 시간별로 로그 파일이 저장될 것이다.

728x90
반응형

댓글

추천 글