[Spring Boot] 특정 클래스의 로깅 레벨 변경하기

스프링부트를 사용해 웹 애플리케이션을 운영하다 보면 특정 클래스의 로깅 레벨을 변경하고 싶을 때가 있습니다. 스프링부트에서 모든 클래스의 로깅 레벨을 변경하는 방법부터 시작해서 특정 패키지의 클래스들 그리고 특정 클래스 하나의 로깅 레벨을 변경하는 방법까지 알아보겠습니다.

모든 클래스의 로깅 레벨 변경

모든 클래스의 로깅 레벨을 변경하는 방법은 간단합니다. 스프링 설정 파일에 logging.level.root=INFO 와 같은 형식으로 환경 변수를 설정해주면 됩니다. 보통 스프링 설정 파일은 application.properties 혹은 application.yaml을 default로 사용합니다.

특정 패키지의 로깅 레벨 변경

모든 클래스가 아니라 특정 패키지의 로깅 레벨을 변경하려면 어떻게 해야 할까요? logging.level.com.test.app.controller=INFO 와 같은 형식으로 환경 변수를 설정합니다. 프로퍼티의 key를 보면 모든 클래스를 포함하는 root 대신 특정 패키지 경로가 입력된 것을 확인할 수 있습니다.

환경 변수 규칙 살펴보기

[모든 클래스의 로깅 레벨 변경 시]
logging.level.root = DEBUG

[특정 패키지의 로깅 레벨 변경 시]
logging.level.com.test.app.controller = DEBUG

그렇다면 특정 패키지가 아니라 특정 클래스 하나의 로깅 레벨만 변경하려면 어떻게 해야 할까요? 저는 com.test.app.controller.HomeController 클래스의 로깅 레벨을 DEBUG로 변경하고 싶으면 아래와 같이 하면 될 거라고 생각했습니다.

logging.level.com.test.app.controller.HomeController = DEBUG

혹시 여러분도 그렇게 생각하셨나요? 하지만 테스트해보면 동작하지 않는 것을 확인하실 수 있습니다. 위 방법은 특정 패키지에 속한 클래스들의 로깅 레벨을 변경하는 경우에만 적용할 수 있습니다. 입력된 문자가 모두 소문자로 변경되어 버리기 때문입니다. 클래스에 대한 로깅 레벨을 변경해야 하는 경우 spring.application.json 환경 변수 설정을 통해 해결할 수 있습니다. 해당 내용은 스프링부트에서 제공하는 레퍼런스 문서에서 찾을 수 있습니다.

아래 링크로 이동해서 4.5 Log Levels 섹션 하단의 Note 박스의 내용을 확인해 보세요.(https://docs.spring.io/spring-boot/docs/3.0.0/reference/html/features.html#features.logging.log-levels)

특정 클래스의 로깅 레벨 변경

애플리케이션을 실행할 때 특정 클래스의 로깅 레벨을 변경하기 위한 spring.application.json 환경 변수를 설정하는 방법은 아래와 같습니다.

java -Dspring.application.json='{“logging” : {“level” : {“com.test.app.controller.HomeController” : “DEBUG”}}}’ -jar testApp.jar

해당 방법 또한 레퍼런스 문서에서 확인할 수 있습니다. (https://docs.spring.io/spring-boot/docs/3.0.0/reference/html/features.html#features.external-config.application-json)

※ Spring Boot 3.0 기준으로 작성되었습니다.

실행중에 로깅 레벨 변경

애플리케이션을 재시작하지 않고 실행중에 동적으로 로깅 레벨을 변경 할 수 있어야 한다는 요구 사항이 있을 수도 있습니다.
스택 오버플로에 동적으로 로깅 레벨을 변경하는 방법에 대해 참고할만한 내용이 있어서 공유합니다.

https://stackoverflow.com/questions/4598702/dynamically-changing-log4j-log-level

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤