ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • log4j의 개념과 사용법
    Web Programming 2021. 1. 8. 18:03
    반응형

    log4j(Log for Java) : JAVA의 LOG Library

     

      개발 공부를 하다보면 온갖 코드에서 오류가 나기 마련이고 이를 확인하기 위해 우리는 늘 로그창을 확인한다. 하지만 직접 Sysout을 사용하여 로그를 찍는데는 한계도 있을 뿐더러 운영의 속도에 영향까지 준다. 이를 위해 사용하게 되는 것이 log4j이다. 

     

    log4j의 장점

    • 속도에 최적화 되어있다. 
    • Multi-Thread 환경에서도 안전하다.
    • 로그의 출력 형식을 쉽게 변경할 수 있다.
    • 융통성이 풍부하다.

    이렇게 좋은 라이브러리이지만 직접 프로젝트에 적용을 해보려니 사전 설정으로 필요한 것이 많아 포스팅으로 정리한다. 여기서는 log4j에서 업그레이드 된 log4j2를 사용한다.

     

    log4j 사용법

    1. 프로젝트에 log4j의 jar 파일을 추가한다.

     

    직접 추가도 가능하지만 pom.xml을 이용하여 진행해보자.

    <dependency>
    	<groupId>org.apache.logging.log4j</groupId>
     	<artifactId>log4j-slf4j-impl</artifactId>
    	<version>2.10.0</version>
    </dependency>

    위와 같은 dependency를 pom.xml에 추가한다. build를 마치면 log4j를 import 시킬 수 있다.

     

    2. log4j를 사용하기 위해서는 이에 대한 기본 설정 파일을 작성한다.

    보통 properties 혹은 xml 확장자를 사용하는데 지금은 xml 확장자를 사용한다.

     

    현재 사용중인 파일 트리

    위와 같이 resources 폴더에 log4j2.xml을 만든다. xml의 내용은 다음과 같다.

    <?xml version="1.0" encoding="UTF-8"?>
    
    <Configuration>
    	<!-- 로그 출력 방식 -->
    	<Appenders>
        	<!-- 콘솔 출력 방식 -->
    		<Console name="console-log" target="SYSTEM_OUT">
    			<PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" />
    		</Console>
    	</Appenders>
    	
    	<Loggers>
    		<Logger name="moniter.PrinterClient" level="DEBUG"></Logger>
    		<Root level="DEBUG">
    			<appender-ref ref="console-log" level="DEBUG" />
    		</Root>
    	</Loggers>
    </Configuration>
    

    제일 간단한 형식의 출력으로 작성해보았다. 각 태그 별로 상세하게 살펴보자.

     

    <!-- 로그 출력 방식 -->
    <Appenders>
      	<!-- 콘솔 출력 방식 -->
      	<Console name="console-log" target="SYSTEM_OUT">
      		<PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" />
      	</Console>
    </Appenders>

    <Appenders> 내부에 출력 방식을 설정해줄 수 있다. 

     

    <Console>은 콘솔에 출력할 방식을, <File>는 파일에 저장할 방식을 설정할 수 있고 지금은 로그 확인만을 필요로 하기에 Console>만 사용했다. 

     

    <PatternLayout>을 활용해 출력할 로그의 형식을 설정할 수 있다. (굉장히 자유롭다!)

     

    <Loggers>
    	<Logger name="moniter.PrinterClient" level="DEBUG"></Logger>
    	<Root level="DEBUG">
    		<appender-ref ref="console-log" level="DEBUG" />
    	</Root>
    </Loggers>

    <Loggers> 내부에 실제 log를 출력할 형식을 지정할 수 있다.

    <Logger>는 패키지를 포함한 클래스의 경로를 의미한다. 해당 name을 가진 로그에는 다음과 같은 level을 사용하겠다 라는 의미다.

    <Root>를 통해 로깅 방식을 임의로 설정할 수 있다.

     

    위의 설정을 따르면 "moniter.PrinterClient"에서 발생한 로그는 <Root>에서 지정한 console-log의 형식에 맞춰 로그를 출력하겠다라는 이야기가 된다.

     

    위에서 자꾸 로그 레벨을 이야기하게 되는데 이 로그 레벨은 해당 레벨 이상의 로그를 출력하겠다는 의미를 갖는다.

    FATAL > ERROR > WARN > INFO > DEBUG > TRACE

     

    3. 해당 클래스에서 Logger 클래스를 불러온다.

     

    이제 java에 Logger 클래스를 세팅하고 찍어주기만 하면 된다.

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    아까 추가했던 dependency를 import 해준다.

     

    private static Logger log = LoggerFactory.getLogger(PrinterStart.class);

    위와 같은 코드를 통해 log 객체를 생성하면 log.error() 혹은 log.info()와 같이 로그를 필요한 곳에 출력할 수 있다.

     

     

     

    이렇게 가장 간단하게 log4j를 사용해보았다. 지금은 가벼운 로그를 찍는데 쓰였지만 활용 영역이 광범위해 향후 서버를 관리할 때 에러로그만을 저장하거나 다양한 형식으로 로그가 필요할 때 사용할 수 있을 것이다. 

     

     

    참고 :

    logging.apache.org/log4j/2.x/manual/appenders.html

     

    Log4j – Log4j 2 Appenders

    facility String The facility is used to try to classify the message. The facility option must be set to one of "KERN", "USER", "MAIL", "DAEMON", "AUTH", "SYSLOG", "LPR", "NEWS", "UUCP", "CRON", "AUTHPRIV", "FTP", "NTP", "AUDIT", "ALERT", "CLOCK", "LOCAL0",

    logging.apache.org

     

     

    반응형
Designed by Tistory.