SLF4J 설정
SLF4J
- logging 관련 라이브러리는 다양하다.
- 이러한 라이브러리들을 하나의 통일된 방식으로 사용할 수 있는 방법을 SLF4J는 제공한다.
- SLF4J는 로깅 Facade이다.
- 로깅에 대한 추상 레이어를 제공하는 것이고 interface의 모음이다.
SLF4J를 이용해 로깅 라이브러리 사용
maven에 SLF4J와 logback 의존성 추가
<!-- SLF4J, logback -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- jcl-over-slf4j : commons-logging를 제거해서 생긴 오류를 제거 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.25</version>
</dependency>
- 참고로 logback-classic 1.2.3은 이미 slf4j-api 1.7.25에 대한 의존성을 가지고 있기 때문에 slf-j-api를 추가할 필요는 없다.
- Spring은 기본적으로 아파치 재단의 commons-logging을 사용한다.
- logback라이브러리를 사용하려면 commons-logging를 제거 해야한다.
- Spring라이브러리에서 commons-logging을 제거하면, Spring을 사용할 때 commons-logging라이브러리를 찾으면서 오류가 발생한다.
- 이러한 오류를 제거하기 위해서 jcl-over-slf4j를 추가한다.
logback 설정
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/tmp/access.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/tmp/access-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern>
</encoder>
</appender>
<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>
</configuration>
Appender 설정
- ConsoleAppender : 콘솔에 로그를 어떤 포맷으로 출력할지를 설정할 때 사용한다.
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern>
</encoder>
</appender>
- FileAppender : 파일에 로그를 어떤 포맷으로 출력할지를 설정한다.
- RollingFileAppender : 로그의 양이 많아지면, 하나의 파일로 관리하기 어려워지는 경우가 생긴다. 이런 문제를 해결하기 위해 하루 단위로 로그를 관리하고자 할 경우 사용된다.
<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>
Log Level
- ex. info 레벨이 설정되면 info 이상의 레벨인 info, warn, error에 대한 로그가 기록됨
- Level이 높을수록 심각한 오류를 의미
- trace : debug보다 세분화된 정보
- debug : 디버깅하는데 유용한 세분화된 정보
- info : 진행상황 같은 일반 정보
- warn : 오류는 아니지만 잠재적인 오류 원인이 될 수 있는 경고성 정보
- error : 요청을 처리하는 중 문제가 발생한 오류 정보
logger 설정
<logger name="org.springframework" level="info"/>
<logger name="kr.or.connect" level="debug"/>
- org.springframework로 시작하는 패키지에 속한 클래스에서 출력하는 로그는 info 레벨이 설정되면 info 이상의 레벨인 info, warn, error에 대한 로그를 기록하라는 의미
root 설정
<root level="debug">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
- root 테그에 설정하면 모든 대상에 대해 CONSOLE과 FILE Appender를 적용하라는 의미.
- 즉, 콘솔과 파일 양쪽에 로그 출력
Logger 객체 선언
- 로그를 남기고자 하는 클래스에 로거 객체를 필드로 선언한다.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...
private Logger logger = LoggerFactory.getLogger(this.getClass());
로그 출력 메서드
- 문자열 결합을 위해 '+'연산자를 사용하지 않는다.(성능 저하)
- 로그로 남길 변수의 수만큼 {}를 이용한다.
- 로그의 수준에 따라 debug(), info(), warn(), error() 메서드를 이용한다.
logger.trace("{} {} 출력", "값1", "값2");
logger.debug("{} {} 출력", "값1", "값2");
logger.info("{} {} 출력", "값1", "값2");
logger.warn("{} {} 출력", "값1", "값2");
logger.error("{} {} 출력", "값1", "값2");
생각해보기
Q. 개발하는 컴퓨터에서 웹 어플리케이션을 실행할 때와 운영환경에서 웹 어플리케이션을 실행할 때 로그를 남기는 방법이 다릅니다. 개발할 때는 콘솔에 로그를 출력하는 것이 편하지만 실제 운영을 할 경우에는 파일로 로그릴 기록하는 것이 좋습니다. 이렇게 환경에 따라서 다른 설정파일을 사용하는 경우가 종종 있습니다. 이런 경우 설정파일을 어떻게 관리하는 것이 좋을까요?
- 용도에 따라 폴더별로 나누어서 관리합니다. 용도에 따른 분류 기준은 찾으시면 나오겠지만 간단하게 이야기 드리면 다음과 같습니다.
local(개인개발), dev(공통개발), stage(운영과 동일한 테스트 환경), production(운영)
Author And Source
이 문제에 관하여(SLF4J 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@oyeon/SLF4J-설정저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)