본문 바로가기

자바

로깅툴(SLF4J) 적용

반응형

* 로깅툴을 사용하는 이유

- System.out.println() 명령어는 IO 리소스를 많이 사용하여 시스템이 느려질 수 있음

- 로그를 파일로 저장하여 분석할 필요가 있음


* 로깅툴의 종류

- commons-logging : 스프링 3에서 사용하던 로깅툴

- log4j : 효율적인 메모리 관리로 그동안 많이 사용되었음

- logback : log4j 보다 성능이 더 우수하여 최근에 많이 사용되고 있음


* SLF4J : logback을 사용하기 위한 인터페이스


* 설정방법


1. pom.xml 의 slf4j-version 을 1.7.21 로 수정


<properties>

<java-version>1.8</java-version>

<org.springframework-version>4.3.0.RELEASE</org.springframework-version>

<org.aspectj-version>1.6.10</org.aspectj-version>

<org.slf4j-version>1.7.21</org.slf4j-version>

</properties>


2. pom.xml 에 라이브러리 추가

<!-- logback 로깅 관련 -->

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>jcl-over-slf4j</artifactId>

<version>1.7.21</version>

</dependency>

<dependency>

<groupId>ch.qos.logback</groupId>

<artifactId>logback-classic</artifactId>

<version>1.1.7</version>

</dependency>


3. src/main/resources 에 logback.xml 파일 작성


<?xml version="1.0" encoding="UTF-8"?>

<configuration>


<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">

<layout class="ch.qos.logback.classic.PatternLayout">

<pattern>%d{HH:mm:ss.SSS} [%thread] %-4level [%logger.%method:%line]-

%msg%n</pattern>

</layout>

</appender>


<appender name="LOGFILE"

class="ch.qos.logback.core.rolling.RollingFileAppender">

<file>/WEB-INF/logback.log</file>

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

<fileNamePattern>logback.%d{yyyy-MM-dd}.log</fileNamePattern>

<!-- 30일 지난 파일은 삭제한다. -->

<maxHistory>30</maxHistory>

</rollingPolicy>

<encoder>

<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4level [%logger.%method:%line]

- %msg %n</pattern>

</encoder>

</appender>


<!-- 로그의 레벨( 지정된 로그 레벨 이상만 수집 ) : DEBUG < INFO < WARN < ERROR < FATAL -->

<logger name="myweb" additivity="false">

<level value="INFO" />

<appender-ref ref="LOGFILE" />

<appender-ref ref="CONSOLE" />

</logger>


<root>

<level value="INFO" />

<appender-ref ref="CONSOLE" />

</root>


</configuration>


4. 로그를 수집할 클래스에 변수 선언


private static final Logger logger = LoggerFactory.getLogger(클래스이름.class);


private : 외부에서 로그를 가로채지 못하도록 하기 위해서

static final : 로그 내용이 바뀌지 않으므로


5. 로그를 수집할 method에서 로그 수집 명령어 호출 


logger.info("로그 타이틀",  출력할 값);


* 로그의 level

1. Debug : Debug, Info, Warn, Error 포함

2. Info : Info, Warn, Error 포함

3. Warn : Warn, Error 포함

4. Error : Error만 포함

반응형