1. SLF4J란?
- logging 관련 라이브러리는 다양하다.
- SLF4J는 이러한 라이브러리들을 하나의 통일된 방식으로 사용할 수 있는 방법을 제공한다.
- SLF4J는
로깅 Facade이다. - 로깅에 대한 추상 레이어를 제공하는 것이고 interface의 모음이다.
2. SLF4J를 이용해 로깅 라이브러리 사용하기
- 어플리케이션은 SJF4J를 사용함으로써, 로깅 라이브러리를 어떤 것을 사용하던지 같은 방법으로 로그를 남길 수 있게함.
- 로그 라이브러리를 교체하더라도, 어플리케이션의 코드는 변경될 필요가 없음.
3. Maven에 SLF4J와 logback 의존성 추가하기
- 참고로 logback-classic 1.2.3은 이미 slf4j-api 1.7.25에 대한 의존성을 가지고 있기 때문에
slf4j-api를 추가할 필요는 없다. - Spring은 기본적으로 아파치 재단의
commons-logging을 사용한다. - logback 라이브러리를 사용하려면 제거해야한다.
- Spring 라이브러리에서 commons-logging을 제거하면, Spring을 사용할 때 commons-logging 라이브러리를 찾으면서 오류(ClassNotFoundException)가 발생한다.
- 이러한 오류를 제거하기 위해
jcl-over-slf4j를 추가한다.
<dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.7.25</version> </dependency>
logback 설정
- logback.xml
- Appender 설정
- logger 설정
- root 설정
Appender : 어디에 어떤 포맷으로 로그를 남길 것인지를 설정
- ConsoleAppender : 콘솔에 로그를 어떤 포맷으로 출력할지를 설정할 때 사용한다.
- FileAppender : 파일에 로그를 어떤 포맷으로 출력할지를 설정한다.
- RollingFileAppender : 로그의 양이 많아지면, 하나의 파일로 관리하기 어려워지는 경우가 생긴다. 이런 문제를 해결하기 위해 하루 단위로 로그를 관리하고자 할 경우 사용된다.
ConsoleAppender 설정
- name을 보통은 "CONSOLE"로 지정한다.
- Pattern 요소에는 log를 출력할 포맷을 지정한다.
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern> </encoder> </appender>
RollingFileAppender 설정
- 기본적으로 기록되는 파일명은 access.log
- rollingPolicy에는 파일이 언제 백업될지를 설정한다.
- 하루 단위로 로그 파일이 생성되고, 최대 maxHistory만큼 생성된다. (이전의 로그 파일은 삭제된다.)
- Pattern 요소에는 log를 출력할 포맷을 지정한다.
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>access.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>access-%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern> </encoder> </appender>
4. 로그 레벨 설정과 root 설정
trace(아래로 내려갈 수록 log 레벨이 높음)debuginfowarnerror
- 어떤 오류를 어떤 방식으로 로그를 남길지 정할 수 있다
- logger 요소는 어떤 패키지 이하의 클래스에서 어떤 레벨 이상의 로그를 출력할지를 결정
- org.springframework로 시작하는 패키지에 속한 클래스에서 출력하는 로그는 info이상 레벨(info, warn, error)로 출력하라.
- kr.or.connect로 시작하는 패키지에 속한 클래스에서 출력하는 로그는 debug이상 레벨로 출력하라.
<logger name="org.springframework" level="info"/> <logger name="kr.or.connect" level="debug"/> <root level="debug"> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root>
5. Logger 객체 선언
- 로그를 남기고자 하는 클래스에 로거 객체를 필드로 선언한다.
import org.slf4j.Logger; import org.slf4j.LoggerFactory; ....... private Logger logger = LoggerFactory.getLogger(this.getClass());
6. 로그 출력 메소드
- 문자열 결합을 위해 '+' 연산자를 사용하지 않는다. (문자열을 '+'연산자를 사용해서 연결하면 속도가 느려짐)
- 로그로 남길 변수의 수만큼 {}를 이용한다.
- 로그의 수준에 따라 debug(), info(). warn(), error() 메소드를 이용한다.
logger.trace("{} {} 출력", "값1", "값2"); logger.debug("{} {} 출력", "값1", "값2"); logger.info("{} {} 출력", "값1", "값2"); logger.warn("{} {} 출력", "값1", "값2"); logger.error("{} {} 출력", "값1", "값2");
참조 URL
'Java > Spring' 카테고리의 다른 글
Multipart란? (1) | 2020.07.22 |
---|---|
로깅(Logging)이란? (0) | 2020.07.20 |
Spring Security (0) | 2020.07.18 |
아큐먼트 리졸버란? (1) | 2020.07.17 |
인터셉터(Interceptor)란? (0) | 2020.07.17 |