[Spring Boot] 스프링부트 활용 - 로깅

dsunni·2020년 8월 6일
1
post-custom-banner

🌵 스프링부트 핵심 기능

로깅

1. 스프링부트 기본 로거 설정

https://docs.spring.io/spring/docs/5.0.0.RC3/spring-framework-reference/overview.html#overview-logging

로깅 퍼사드 & 로거

  • 로깅 퍼사드 : Commons Logging, SLF4j
  • 로거 : JUL, Log4J2, Logback

스프링부트는 기본적으로 Commons Logging을 사용한다.

로깅퍼사드란 로거 API들을 추상화 해놓은 인터페이스들을 뜻한다.

로깅퍼사드는 로깅 퍼사드들 밑에 있는 로거를 바꿔 낄 수 있게 해준다. 따라서 주로 프레임워크들은 애플리케이션들이 로거를 원하는 대로 쓸 수 있도록 해주기 위해 로깅 퍼사드들을 기반으로 개발한다.

Commons Logging은 런타임시 클래스 로딩 관련 이슈 등 여러 문제들이 있었다. 그에 따라 Commons Logging을 기피하게 되었고 SLF4j라는 새로운 퍼사드가 만들어졌다.

그럼에도 불구하고 스프링이 Commons Logging을 사용하는 이유는 SLF4j이 나오기 이전에 스프링 코어 모듈이 생성되었기 때문이다.. T.T

Spring ver1에서는 pom.xml 의존성 설정을 통해 스프링 코어에서 exclusion으로 Commons Logging을 빼고 SLF4j를 추가해서 사용했다. 하지만 너무 귀찮다...

따라서 Spring ver5부터는 그렇게 exclusion시키지 않아도 Commons Logging 코드를 자체적으로 컴파일 시점에 SLF4j 등으로 변경할 수 있는 기능을 가진 Spring-JCL이라는 모듈을 만들었다.


Spring-JCL

Commons Logging → SLF4j → Logback

pom.xml에 따로 Exclusion을 해주지 않아도 Commons Logging을 SLF4j or Log4j2로 변환해준다.

그리고 SLF4j는 최종적으로 SLF4j의 구현체인 Logback으로 보낸다.

최종적으로 우리는 Logback 로거를 사용하게되는 것이다.

image

Dependency에서 logback을 확인할 수 있다.



2. 커스터마이징 로거

application.properties

spring.output.ansi.enabled=always
logging.path=logs
logging.level.me.dsunni=debug
  • 컬러 출력: spring.output.ansi.enabled = always
  • 파일 출력: logging.file 또는logging.path
  • 로그 레벨 조정: logging.level.패지키 = 로그 레벨
    • 패키지 내 로거는 디버깅 로거로 보여진다

커스텀 로그 설정 파일 사용하기

  • Logback (추천): logback-spring.xml
  • Log4J2: log4j2-spring.xml
  • JUL (비추): logging.properties

Logback 커스텀

파일 내 Logback Extension 사용 가능하다

  • 프로필 : <springProfile name="Profile">
  • Environment 프로퍼티 : springProperty

logback-spring.xml

resources 패키지 내

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <logger name="me.dsunni" level="DEBUG"/>
</configuration>

적합한 로깅 설정을 변경하면된다



3. 로거를 Log4j2로 변경하기

https://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html#ho

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-logging</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
  • web에서 exclusion으로 logging을 뺀 다음 log4j2를 넣기
  • 사실상 똑같다.
profile
https://dsunni.tistory.com/ 이사갑니답
post-custom-banner

0개의 댓글