Spring Boot Console Output 콘솔 로그 모드와 콘솔 로그 색상 설정

이동영·2024년 3월 12일
0

스프링

목록 보기
11/17

기본적으로 기본 로그 구성은 메시지가 기록될 때 콘솔에 메시지를 표시한다. ERROR-level, WARN-level, and INFO-level 처럼 콘솔창에 로그가 기록된다. --debug 플래그로 어플리케이션을 시작하여 디버그 모드를 활성화 할 수 있다.

$ java -jar myapp.jar --debug

application.properties에서 debug=true로 지정할 수 있다.

디버그 모드가 활성화 되면 핵심 로거 일부(내장 컨테이너, Hibernate, Stpring Boot)가 더 많은 정보를 콘솔에 출력한다.

디버그 모드

개발자가 어플리케이션을 디버깅 하는데 도움이 되는 기능이다. 디버깅 모드가 활성화 도면 더 많은 로그 정보를 출력 한다.

핵심 로거

핵심 로거는 애플리케이션 실행중 중요한 정보를 기록하는 특정 로거 카테고리 이다. spring Boot의 경우 내장 컨테이너, Hibernate, Spring boot 자체 등이 핵심 로거에 포함된다.

내장 컨테이너 : 서버 시작 및 종료, 요청 처리, 연결 풀 활동 등

[INFO] org.springframework.boot.web.servlet.ServletContextInitializer - Initializing Spring Framework servlet context
[INFO] org.springframework.web.context.support.StandardServletEnvironment - Adding [servletContextInitParams] to environment
[INFO] org.springframework.web.context.support.StandardServletEnvironment - Adding [webApplicationInitializerClasses] to environment
[INFO] org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext - Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@7673633a: startup date [Mon Mar 13 11:43:14 KST 2024]; root of context hierarchy

Hibernate : 엔티티 매핑, SQL쿼리, 트랜젝션 관리등

[DEBUG] org.hibernate.SQL - SELECT * FROM users WHERE id = ?
[DEBUG] org.hibernate.SQL - SELECT * FROM roles WHERE user_id = ?
[INFO] org.hibernate.engine.jdbc.spi.SqlStatementLogger - JDBC execution start : SELECT * FROM users WHERE id = ?
[INFO] org.hibernate.engine.jdbc.spi.SqlStatementLogger - JDBC execution end : SELECT * FROM users WHERE id = ?
[INFO] org.hibernate.engine.jdbc.spi.SqlStatementLogger - JDBC execution start : SELECT * FROM roles WHERE user_id = ?
[INFO] org.hibernate.engine.jdbc.spi.SqlStatementLogger - JDBC execution end : SELECT * FROM roles WHERE user_id = ?

Spring Boot : 애플리케이션 구성, 빈 생성, 자동 설정 등

[INFO] org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer - Logging initialized with INFO level
[INFO] org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer - Auto-configured logging:
[INFO] org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer -  logging.file=/tmp/spring.log
[INFO] org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer -  logging.level.org.springframework.web=INFO
[INFO] org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer -  logging.level.org.hibernate=INFO
[INFO] org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer -  logging.level.org.springframework.boot=INFO

핵심 로거는 문데를 디버깅 하는데 유용하다. 로그 레벨을 DEBUG로 설정하면 핵심 로거에서 더 많은 정보를 얻을 수 있다.

trace mode

spring boot에서는 debug모드 외에도 trace 모드를 활성화 하여 핵심 로거에 대한 상세한 정보를 얻을 수 있다.

트레이스 모드 활성화 하기

트레이스 모드를 활성화 하는데 2가지의 방법이 있다.

--trace 플래그 사용하기
어플리케이션 실행시 예제와 같이 입력한다.

java -jar my-app.jar --trace

application.properties 설정: application.properties 파일에 trace 속성을 true 값으로 설정합니다.

spring.debug=true  // 디버그 모드도 함께 활성화 (선택 사항)
trace=true

트레이스 모드가 영향을 미치는 로거

내장 컨테이너 : 서버 시작 및 종료, 요청 처리, 연결 풀 활동 등에 대한 상세 정보
Hibernate 스키마 생성 : 엔티티 매핑과 데이터베이스 스키마 생성 과정에 대한 상세 정보
Spring Boot : 애플리케이션 구성, 빈 생성, 자동 설정 등에 대한 상세 정보

trace 모드 주의사항

  • 트레이스 모드는 디버그 모드보다 많은 로그를 생성하기에 성능 저하를 줄 수 있다. 개발 테스트 환경에서만 사용하길 권장한다.
  • 트레이스 모드는 모든 로거에 영향을 미치지 않기에 특정 로그에 대한 트레이스 로그를 활성하 시키려면 해당 로거 설정을 별도로 해야한다.

트레이스 모드 활용

트레이스 모드는 애플리케이션의 흐름을 상세하게 추적하는데 유용하다. 하지만 생성되는 로그의 양이 방대하기 때문에 주의가 필요하다.

Color-coded Output

스프링 부트에서는 기본적으로 터미널 로그 메시지를 출력시 ANSI(American National Standards Institute) escape sequence를 사용하여 텍스트 색상을 지정할 수 있다. 이는 가독성 향상에 도움이 된다.

자동 감지 및 설정 재정의

spring boot는 터미널이 ANSI escape sequence를 지원하는지 자동으로 감지한다. 지원하는 경우 기본적으로 컬러 출력을 사용한다. spring.output.ansi.enabled속성을 사용하여 자동 감지를 재정의할 수 있다.
DETECT: 자동 감지 사용 (기본값)
ALWAYS: 항상 컬러 출력 사용
NEVER: 컬러 출력 사용하지 않음

설정 방법

spring.output.ansi.enabled 속성을 다음과 같은 방법으로 설정할 수 있다.

  • application.properties
spring.output.ansi.enabled=ALWAYS  # 항상 컬러 출력 사용
# 또는
spring.output.ansi.enabled=NEVER  # 컬러 출력 사용하지 않음
  • 환경 변수:
SPRING_OUTPUT_ANSI_ENABLED=ALWAYS  # 항상 컬러 출력 사용
# 또는
SPRING_OUTPUT_ANSI_ENABLED=NEVER  # 컬러 출력 사용하지 않음

참고

  • 터미널이 ANSI escape sequence를 지원하지 않는 경우 컬러 출력 설정과 상관없이 컬러 출력은 허용이 되지 않는다.
  • 일부 IDE나 툴은 컬러 출력을 지원하지 않을 수도 있다.

컬러 출력 활용

  • 가독성 향상 : 로그 레벨 (INFO, WARN, ERROR 등)에 따라 다른 색상을 사용하여 중요한 정보를 쉽게 볼 수 있다.
    = 로그 구분 : 여러 애플리케이션 로그를 볼 때 컬러를 활용하여 쉽게 구분하여 볼 수 있다.'

결론

Spring Boot의 spring.output.ansi.enabled을 사용하여 로그의 출력 색상을 활성화 혹은 비활성화 할 수 있다. 그리고 터미널이 ANSI escape sequence을 지원해야 로그의 컬러 색상을 지정할 수 있으며 이는 가독성으 높이는데 도움이 된다.

로그 콘솔 출력 색상 설정

스프링 부트는 기본적으로 logback이라는 로깅 프레임워크를 사용하여 로그 메시지를 콘솔에 출력한다. logback은 ANSI escape sequence를 사용하여 텍스트 색상을 지정할 수 있으며 스프링 부트는 이 기능을 활용하여 로그 레벨에 따른 색상을 구분한다.

%clr

%clr 를 사용하여 로그의 색상을 설정할 수 있다.

로그 색상 표

FATAL Red

ERROR Red

WARN Yellow

INFO Green

DEBUG Green

TRACE Green

또한 사용하고 싶은 색상을 직접 설정할 수 있다.

%clr(%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}){yellow}

색상 지원

blue

cyan

faint

green

magenta

red

yellow
profile
가치를 제공하는 개발자

0개의 댓글