-
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
반응형'Web Programming' 카테고리의 다른 글
검색엔진 최적화(SEO) (0) 2021.09.29 Parent Node 클릭 시 Child Node로 인해 정상적으로 이벤트 작동이 하지 않을 때 (0) 2021.09.07 JDBC와 ODBC의 차이 (0) 2020.11.12 정규표현식 (0) 2020.10.27 http와 https의 차이 (0) 2020.09.25