Java/Spring Boot

[Spring Boot] 로깅 - Spring Boot 기본 로거 설정

hh_lin 2022. 3. 22. 03:05

1. 로깅 퍼사드 VS 로거

  • 로깅 퍼사드
    - 로거 api들을 추상화해놓은 인터페이스
    - 로깅 퍼사드 사용 시 로거를 바꿔낄 수 있다는 장점
    - ex) Commons Logging, SLf4j


  • 로거
    - 실제 로그를 기록하는 구현체
    - ex) JUL(Java Util Logging), Log4J2, Logback

 

 

 

 

 

 

 

 

 

 

 

2. Spring Boot는 Logback을 사용한다

    • Spring Boot는 기본적으로 Commons Logging을 사용
      -> Spring 프레임워크의 spring-core 모듈이 만들어질 때 쯤에는 SLF4j가 없었기 때문
    • Commons Logging의 여러가지 문제들로 인해 구조적으로도 심플하고 더 안전한 SLF4j를 사용하게 됨
      -> Spring 1.x 버전에서는 spring-core에서 Commons Logging을 제외하고 SLF4j를 넣는 설정이 포함되어 있었음
    • Spring 5에서는 exclusion시키지 않고도 안전하게 사용할 수 있도록 자체 내에서 Spring-JCL 모듈을 만듦
      -> Spring에 있는 JCL(Jakarta Commons Logging) 코드를 컴파일 시점에 SLF4j나 Log4J2로 변경하는 모듈
    • pom.xml에서 exclusion을 하지 않아도 Logback으로 로깅
    • Commons Logging은 런타임 시에 로거를 찾지만, 
      SLF4j는 컴파일 시에 어떤 로거를 사용할지 다 결정이 된 상태로 어플리케이션이 실행되기 때문에

      런타임 시에 클래스 로더 관련 이슈는 없는 반면, 의존성 설정이 중요

-> Log4J를 SLF4j로, JUL을 SLF4j로 바꾸는데, SLF4j의 구현체가 Logback이므로 결국에는 Logback으로 로그를 남김

 

 

최종적으로 보자면, 
Spring Boot 내에서 Commons Logging을 사용한다해도 실질적으로는 SLF4j를 사용하게 되고,
SLF4j로 받아서 결국에는 Logback으로 로그를 남김

 

 

 

 

 

 

 

 

 

 

 

 

 

3. 스프링 부트 로깅

① 기본 포맷
: 날짜 / 시간 / 로그레벨 / PID / Thread 이름 / 풀 패키지 경로 및 클래스명 / 메세지

 

 

② --debug (아래 log level 변경하기 참고)

: 일부 핵심 라이브러리만 디버깅 모드로 변경

(core logger인 embedded container, Hibernate, Spring Boot만 debug로 찍어줌)

 

 

 

③ --trace 

: 전부 다 디버깅 모드로 변경

 

 

 

④ 컬러 출력 (application.properties)

spring.output.ansi.enabled=always

 

 

 

⑤ 파일 출력 (application.properties)

: logging.file.name 또는 logging.file.path

logging.file.path=logs

 

 

 

 

 

⑥ 로그 레벨 조정 (application.properties)

: logging.level 패키지 = 로그 레벨

로그 레벨을 패키지마다 설정 가능

logging.level.kvp.hyelin.springboot=info

 

 

직접 만든 패키지가 아니여도 로그 레벨 지정 가능

logging.level.org.springframework=debug

 

 

# log level 변경하기

2022.03.13 - [Java/Spring & Spring Boot] - [Spring Boot] Log Level

 

[Spring Boot] Log Level

# log level 아무런 옵션도 변경하지 않고 실행하게 되면 기본적으로 application의 로그 레벨은 "Info" ("Info" 레벨의 로그만 찍힘) IntelliJ 우측 상단 Edit Configurations Configuration - Environment 내..

hhlin.tistory.com

 

 

 

 

 

 

 

 

 

 

 

 

 

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

 

스프링 부트 개념과 활용 - 인프런 | 강의

스프링 부트의 원리 및 여러 기능을 코딩을 통해 쉽게 이해하고 보다 적극적으로 사용할 수 있는 방법을 학습합니다., - 강의 소개 | 인프런...

www.inflearn.com

https://meetup.toast.com/posts/149

 

(Spring Boot)Logging과 Profile 전략 : NHN Cloud Meetup

(Spring Boot)Logging과 Profile 전략

meetup.toast.com

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

 

Overview of Spring Framework

The Spring Framework is a Java platform that provides comprehensive infrastructure support for developing Java applications. Spring handles the infrastructure so you can focus on your application. Spring enables you to build applications from "plain old Ja

docs.spring.io

https://wordbe.tistory.com/entry/Spring-Boot-11-%ED%94%84%EB%A1%9C%ED%8C%8C%EC%9D%BC-%EB%A1%9C%EA%B9%85-%EC%84%A4%EC%A0%95

 

[Spring Boot] 11 - 프로파일, 로깅 설정

Spring Boot 011 - 프로파일, 기본 로깅 3. Profiles Spring 프로파일은 어플리케이션 설정의 일부를 분리하고, 특정 환경에서만 작동하게 만드는 방법을 제공합니다. @Component , @Configuration , @Configurati..

wordbe.tistory.com