본문 바로가기
Spring

spring Slf4J, logback 로그 설정하기(콘솔창 출력)

by devjh 2021. 3. 17.
반응형

이번 게시글에서는 spring boot에서 Log를 설정하는 방법을 정리해보겠습니다.

 

스프링에서는 Slf4j 인터페이스를 이용하여 로깅처리를 합니다.

1. Slf4j란?

Slf4j 는 Simple Logging Facade For Java의 약자로

다양한 Logging Framework에 대한 인터페이스 입니다.

Logging FrameWork는 log4j, log4j2, logback 등 다양하지만

@Slf4j라는 어노테이션을 통해 log객체를 만들어 사용할 수 있으며

LogginFrameWork(구현체)가 변경되더라도 Slf4j덕분에 구현체에 종속되지 않고 사용 가능합니다.

lombok을 추가하시면 바로 사용 가능하며

Spring에서 기본적으로 채택한 logging Framework인 Logback을 사용하게 됩니다.

 

이제 log객체를 불러왔으니 log.info(msg) 등으로 로그를 출력할 수 있습니다.

 

이번 예제에서 사용할 Test 코드입니다.

@Slf4j
class MappertutApplicationTests {

	@Test
	void logTest() {
		log.trace("trace test");
		log.debug("debug test");
		log.info("info test");
		log.warn("warn test");
		log.error("error test");
	}
}

 

실행결과

저는 5줄의 log를 작성하였는데 이상하게 첫줄이 안나왔습니다.

 

안나온 이유와 로그 설정방법을 알아보겠습니다.

 

2. logback.xml 생성하여 로그 설정

<configuration>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyyMMdd HH:mm:ss.SSS} [%thread] %-5level [%logger{0}:%line] - %msg %n</pattern>
        </encoder>
    </appender>
    
    <root level="trace">
        <appender-ref ref="CONSOLE" />
    </root> 
</configuration>

 

logback.xml 설정파일을 적용한 결과부터 확인해보겠습니다.

이전이랑 로그가 조금 달라진것을 확인 할 수 있습니다.

하나씩 정리해보겠습니다.

 

1) Appender

  • 어펜더는 로그이벤트를 설정해주고
  • root, logger 태그 에서 가져다 쓰는 용도입니다.
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{yyyyMMdd HH:mm:ss.SSS} [%thread] %-5level [%logger{0}:%line] - %msg %n</pattern>
    </encoder>
</appender>

 

어펜더의 이름을 CONSOLE로 설정해주고 pattern을 설정 해주겠습니다.

%d{yyyyMMdd HH:mm:ss.SSS} [%thread] %-5level [%logger{0}:%line] - %msg %n
20210318 00:02:36.653 [mainERROR [MappertutApplicationTests:17] - error test 

 

- %d{yyyyMMdd HH:mm:ss.SSS}

로그가 찍힌 시간을 기록하는 설정입니다.

 

- [%thread]

로그를 찍은 스레드를 기록해줍니다.

 

- %-5level

로그 레벨을 출력해줍니다.

앞에 -5는 5칸을 할당하겠다는 의미입니다.(error debug는 다섯글자이므로 info도 5칸을 차지하라는 설정입니다.)

 

- %logger{0}:%line

로그를 출력시킨 java파일명과, line입니다.

0은 파일명의 포맷팅 형식입니다. 크기를 증가시키면 com.example.demo.~~~의 풀네임이 출력됩니다.

 

- %msg %n

메시지와 줄바꿈입니다.

 

 

 

2) Appender 사용하기

 

이제 설정했던 Appender을 사용하는 부분입니다.

<root> 태그와 <logger> 태그 등 에서 사용하는데 root태그를 예로 들어보겠습니다.

<root level="trace">
     <appender-ref ref="CONSOLE" />
</root> 

 

root 태그는 level이라는 속성을 가지고있습니다.

해당속성은 log를 찍을 레벨을 설정해줍니다.

 

level은 총 5가지 단계로 구별되며

설정된 레벨 이상의 로그만 출력됩니다.

TRACE - DEBUG - INFO -WARN - ERROR

해당 설정을 쉽게 설명하자면 

 

우리 애플리케이션의 로그는 trace 이상의 로그는 모두 보여줄꺼고

appender(설정했던 로그이벤트)는 CONSOLE이라는 이름으로 정의한 Appender를 사용할꺼야!

 

입니다.

 

처음에 로그가 4개만 찍힌 이유가 밝혀졌습니다.

로그의 루트레벨이 DEBUG였기 때문에 Trace는 무시됐던 것입니다.

 

마지막으로 logger태그에 appender를 포함시켜 사용하는 방법입니다.

 

logger는 다음과 같이 사용합니다.

패키지나, 파일, 을 선택해서 level을 재정의하여 사용할 수 있습니다.

<logger name="com.example.demo.service.BoardService" level="error">
    <appender-ref ref="CONSOLE" />
</logger>

 

반응형

댓글