지난 포스팅에서 LOGGER의 개념에 대해 학습했습니다.
오늘은 maven 프로젝트에서 logger를 사용하는 방법에 대한 내용을 다루어보겠습니다.
지난 포스팅이 궁금하신 분들은 이 링크를 통해 확인해주세요.
로깅과 System.out.println()의 차이점
프로젝트를 하면 수많은 문제에 직면하게 되는데요. 그럴 때 로그를 찍어보거나 디버깅을 하는 경우가 많습니다. 로그를 찍을 때 logger.xx 또는 System.out.println()을 사용해 콘솔에 정보를 띄우기도
howtomakecode.tistory.com
로그를 찍기 위해서는 Log4j(Log for Java)라는 라이브러리가 필요합니다.
라이브러리를 추가해주기 위해 pom.xml에 다음과 같이 의존성을 주입해줍니다.
Log4j, slf4j 의존성 추가
![](https://blog.kakaocdn.net/dn/quZVT/btslaHfN3Le/H2JRQM1BkPSkMf6eSIK5u0/img.jpg)
Log4j 라이브러리의 구성요소에 대한 간략한 설명을 접은글로 기재하였습니다.
1. spring-context, commons-dbcp2에서 commons-logging 을 exclusion 처리합니다.
(=spring의 기본 로깅인 commons-logging을 제외하는 기능)
※ slf4j(Simple Logging Facade For Java) Logsj를 보완해주는 라이브러리로, 로깅 프레임워크의 추상화를 지원합니다.
slf4j의존성 추가 시 Log4j를 사용하다 Log4j2로 프레임워크 교체 시 많은 코드 수정을 하지 않아도 됩니다.
2. slf4j-api, jcl-over-slf4j, slf4j-log4j12 추가
※ slf4j의 구현체로 Log4j를 사용합니다.
3. Log4j-core 추가
pom.xml
<!-- Properties -->
<properties>
<slf4j.version>1.7.25</slf4j.version>
<log4j.version>2.11.0</log4j.version>
</properties>
<!-- logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
위의 방법으로 로그가 찍히지 않는다면 이렇게 사용해보세요.
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.7</version>
</dependency>
</dependencies>
Log4j의 로그레벨
- FATAL : 아주 심각한 에러가 발생한 상태
- ERROR : 요청을 처리하는 중 문제가 발생한 상태
- WARN : 처리 가능한 문제이지만, 향후 에러의 원인이 될 수 있는 상태
- INFO : 로그인, 상태변경과 같은 정보성 메세지
- DEBUG : 개발시 디버그 용도로 사용
- TRACE : 디버그 레벨이 너무 광범한 것을 해결하기 위해서 좀 더 상세한 상태를 나타냄
로그 찍는 방법
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger LOGGER = LoggerFactory.getLogger(XYZ.class);
LOGGER.debug("################## member_save.do start #####################");
LOGGER.debug("type: {}", type);
LOGGER.debug("empnos: {}", request.getParameter("empnos"));