본문 바로가기
[ Developer ]/Spring Framework

[Spring] 스프링 로그남기기 Logback SLF4J 이용

by 김현섭. 2016. 6. 10.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
SLF4J와 LogBack을 이용한 로그 남기기
# Java의 로깅툴
  • commons-logging
  • log4j
  • java util logging
  • logback
  • 실무에서는 log4j가 많이 사용되지만 속도면에서 우세한 logback으로 많이 변하는 추세

로그를 입력하기 위해서는 추가해야될 부분이 있다
의존 라이브러리를 뺄 수 있는데 아래와 같이 적으면 된다


MVC 밑에 exclusions를 추가해서 적어주면 된다
commons-logging을 제거하고 싶다면 그대로 적어주면 된다


그리고 난 뒤 pom.xml에서 Dependencies에서 3가지를 추가해주면 된다


그런 후 서버를 재 시작한다면 검정색 글씨로 콘솔창에 작성된 것이 logback을 통해서 적힌 로그들이다


그리고 src/main/resources에서 logback.xml 파일을 생성해 준다


그러고 난뒤 다음과 같이 적어주면 된다


# logbak.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>
                ▶ %-5level %d{HH:mm:ss.SSS} [%thread] %logger[%method:%line] - %msg%n     
            </pattern>
        </encoder>
    </appender>
    
    <logger name="org.springframework" level="INFO" />
    
    <root level="info">
        <appender-ref ref="console" />
    </root>
</configuration>   

# pattern 설명
  • % thread
    • 실행 스레드 명
  • % msg
    • 로깅 내용
  • % n
    • 개행 문자 (줄바꿈)
  • % -5level
    • 로깅 레벨 출력, 고정폭 (5자리)
  • % d{yyyy-mm-dd HH:mm:ss.SSS}
    • 로깅하고 있는 현재 시간
  • % logger
    • 패키지 포함 클래스 정보
  • % method
    • 로깅하고 있는 클래스의 메소드
  • % line
    • 로깅하고 있는 클래스의 소스 line

# Logback Log Level
5가지의 로그 레벨이 존재
  • Trace
    • 가장 큰 단위
  • Debug
    • 개발시 가장 많이 사용
  • Info
    • 운영 시 사용
  • Warn
  • Error

그렇다면 위와 같이 ▶ %-5level %d{HH:mm:ss.SSS} [%thread] %logger[%method:%line] - %msg%n 라고 작성이 되어 있다면
저런 양식에 맞춰서 내용이 입력되는 것이다

ConsoleAppender와 FileAppender가 있다
Console은 콘솔에 찍어주는 것이며 File은 물리적인 파일에 찍어서 로깅하는 것이다
그러나 파일이 하나에만 입력된다면 파일 하나의 크기가 너무 커지기 때문에 
파일을 날짜 별로 쪼갤 수 있는 기능을 지원해준다

소스의 appender-ref의 ref의 console은 appender의 name을 뜻한다

그런 후 서버를 재시작한다면 로그가 찍힌 것을 볼 수 있다


그렇다면 이제 ArticleController에 가서 로거를 추가해본다



위와 같이 적어주면 된다
getLogger 안에는 로거를 호출하는 클래스명과 .class를 넣으면 된다

그리고 테스트를 위해서 5가지 레벨에 문자열을 입력해본다


그러고 난 후 list로 접근 시 log가 찍힌 것을 볼 수 있다


Info까지 밖에 출력이 안된 것을 볼 수 있다
logback.xml에서 root level이 info라서 info까지 밖에 되는 것이다
그래서 debug를 입력한다면 debug까지 로그가 되는 것을 볼 수 있다