Spring Boot Custom Log Configuration 사용자 정의 로그 구성 logback설정

이동영·2024년 3월 12일
0

스프링

목록 보기
16/17

스프링 부트 애플리케이션에서 로깅 시스템을 활성화하고 설정하는 방법은 여러가지가 있다.

1. 라이브러리 추가 및 설정 파일 사용

활성화 방법

해당 로깅 시스템 라이브러리를 클래스패스에 추가한다.

설정

다음 두가지의 방법으로 설정할 수 있다.

  • 클래스패스 루트: 적절한 설정파일을 클래스 패스 루트 디렉터리에 위치 시킨다.
    application.yaml 파일에서 logging.config 속성을 사용하여 설정 파일 위치를 지정합니다.

2. 강제 설정

  • 시스템 프로퍼티 org.springframework.boot.logging.LoggingSystem을 사용하여 특정 로깅 시스템을 강제로 사용하도록 설정할 수 있다.

3. 비활성화

  • 시스템 프로퍼티 org.springframework.boot.logging.LoggingSystem을 none값으로 설정하여 스프링 부트의 로깅 구성을 완전 비활성화 할 수 있다.

예시

Logback사용 : logback라이브러리를 클래스패스에 추가하고 logback.xml설정 파일을 클래스패스 루트에 위치시킨다.

로깅 비활성화: 시스템 프로퍼티 org.springframework.boot.logging.LoggingSystem을 none 값으로 설정합니다.

로깅 시스템에 따른 로깅 파일 설정

Logback

  • logback-spring.xml
  • logback-spring.groovy
  • logback.xml
  • logback.groovy

Log4j2

  • log4j2-spring.xml
  • log4j2.xml

JDK (Java Util Logging)

  • logging.properties

logback-spring.xml

스프링 애플리케이션 로그백 logback설정시 logback-spring.xml를 사용하는 것을 권장한다.

초기화 제어

  • 스프링 애플리케이션은 시작 과정과 전체 라이프 사이클 동안 로깅에 크게 의존한다.
  • 표준 logback.xml을 위치를 사용하면 스프링이 제대로 구성하기 전 Logback이 초기화 될 수 있으며 이는 예상하지 못하는 충돌이 발생할 수 있다.

스프링 통합 기능

-spring 변형 파일은 스프링이 Logback과 통합하도록 특별히 설계된 기능을 활용할 수 있도록 한다.
logback-spring.xml 파일을 사용하면 스프링 로깅 초기화 프로세스를 더 잘 제어할 수 있으며 앻플리케이션의 필요에 따라 Logback이 구성되었는지 확인할 수 있다.

정리 : 스프링 애플리케이션 logback설정시 -spring변형 파일 사용하면 나 나온 통합과 제어를 제공한다.

Spring환경 설정 시스템 속성으로 전달하여 로깅 시스템 구성에서 사용할 수 있도록 돕는다. 즉 application.properties파일에 logging.file.name을 설정하거나 환경 변수로LOGGING_FILE_NAME을 설정하면 LOG_FILE 시스템 속성이 설정 된다.

정리 : application.properties에서 logging.file.name을 설정하면 LOG_FILE 시스템 속성이 변경됨

로깅 설정

logging.file.name (LOG_FILE)

  • 해당 이름으로 된 로그 파일을 생성해낸다.

logging.file.path (LOG_PATH)

  • 로그 파일을 저장할 디렉토리 경로를 설정한다.

logging.pattern.console (CONSOLE_LOG_PATTERN)

  • 콘솔에 출력되는 로그 메시지의 형식을 설정한다. 시간, 레벨, 메시지 등을 포함시킬 수 있다.

logging.pattern.dateformat (LOG_DATEFORMAT_PATTERN):

  • 로그 메시지에 포함되는 날짜 형식을 설정한다.

logging.charset.console (CONSOLE_LOG_CHARSET)

  • 콘솔에 출력되는 로그 메시지의 인코딩(문자열 표현 방식을 설정)

logging.threshold.console (CONSOLE_LOG_THRESHOLD):

  • 콘솔에 출력되는 로그 레벨을 설정한다.
  • 예를들어 INFO 레벨 이상만 출력할 수 있도록 설정한다.

logging.pattern.file (FILE_LOG_PATTERN):

  • 파일에 기록되는 로그 메시지의 형식을 설정한다.

logging.charset.file (FILE_LOG_CHARSET):

  • 파일에 기록되는 로그 메시지의 인코딩을 설정한다.

logging.threshold.file (FILE_LOG_THRESHOLD):

  • 파일에 기록되는 로그 레벨을 설정한다.

logging.pattern.level (LOG_LEVEL_PATTERN):

  • 로그 레벨 자체를 어떤 형식으로 표시할 지 설정한다. 기본값은 "%5p" 이다.

PID

  • 현재 실행중인 프로세스의 ID이다.

Logback 사용시 다음 속성도 전송할 수 있다.

logging.logback.rollingpolicy.file-name-pattern (LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN)

  • 이 설정은 로그 파일이 롤링이 되었을 때 사용할 수 있다.

  • 롤링이란 용량 초과 혹은 시간 초과에 따른 기존 로그 파일을 압축하고 새로운 로그 파일을 생성하는 것을 의미한다.

  • 기본값으로 ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz이다.

  • ${LOG_FILE} : 설정되어 있는 logging.file.name 이다. 즉 로그파일의 이름이다.

  • %d{yyyy-MM-dd}: 롤링된 날짜를 나타낸다.

  • %i 롤링된 파일의 순번 : (예: application.log.2024-03-12.1.gz)

  • .gz 압축 포맷(gzip)

이 패턴 사용시 생성되는 파일 이름

application.log.2024-03-11.1.gz (2024-03-11에 롤링된 첫 번째 파일)
application.log.2024-03-12.1.gz (2024-03-12에 롤링된 첫 번째 파일)
application.log.2024-03-12.2.gz (2024-03-12에 롤링된 두 번째 파일)

logging.logback.rollingpolicy.clean-history-on-start (LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START)

  • 애플리케이션 시작시 기존 롤링된 로그 파일들을 삭제할지 여부를 설정한다.

logging.logback.rollingpolicy.max-file-size (LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE)

  • 개별 로그 파일의 최대 크기를 설정하며 용량 초과하면 롤링이 발생한다.

logging.logback.rollingpolicy.total-size-cap (LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP):

  • 전체 롤링된 로그 파일들의 총 크기를 제한한다. 이 크기를 초과하면 오래된 파일 순으로 삭제도니다.

logging.logback.rollingpolicy.max-history (LOGBACK_ROLLINGPOLICY_MAX_HISTORY)

  • 최대 보관될 롤링 파일의 개수를 설정한다. 이 개수를 초과하면 오래된 파일부터 삭제된다.

Logback xml 설정파일

<?xml version="1.0" encoding="UTF-8"?>

<!--
Default logback configuration provided for import
-->

<included>
	<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
	<conversionRule conversionWord="correlationId" converterClass="org.springframework.boot.logging.logback.CorrelationIdConverter" />
	<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
	<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />

	<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr(${LOGGED_APPLICATION_NAME:-}[%15.15t]){faint} %clr(${LOG_CORRELATION_PATTERN:-}){faint}%clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
	<property name="CONSOLE_LOG_CHARSET" value="${CONSOLE_LOG_CHARSET:-${file.encoding:-UTF-8}}"/>
	<property name="CONSOLE_LOG_THRESHOLD" value="${CONSOLE_LOG_THRESHOLD:-TRACE}"/>
	<property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- ${LOGGED_APPLICATION_NAME:-}[%t] ${LOG_CORRELATION_PATTERN:-}%-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
	<property name="FILE_LOG_CHARSET" value="${FILE_LOG_CHARSET:-${file.encoding:-UTF-8}}"/>
	<property name="FILE_LOG_THRESHOLD" value="${FILE_LOG_THRESHOLD:-TRACE}"/>

	<logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/>
	<logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/>
	<logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/>
	<logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/>
	<logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/>
	<logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/>
	<logger name="org.hibernate.validator.internal.util.Version" level="WARN"/>
	<logger name="org.springframework.boot.actuate.endpoint.jmx" level="WARN"/>
</included>
profile
가치를 제공하는 개발자

0개의 댓글