본문 바로가기

Programing/Scripts

spring.boot - yml에서 특정 클래스 로깅 레벨 설정하기

기본적으로 레퍼런스는 아래와 같다.

https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-custom-log-levels


여기서는 .properties 기준으로 설명이 되어 있는데,

logging.level.org.hibernate=ERROR

식으로 하이버네이트 패키지에 대해 로깅 레벨을 ERROR로 설정할 수 있다.


그렇다면 yml에서는 어떻게 해야 하나?


🔴

logging:
level:
org.hibernate=ERROR

이렇게 하면 바인딩 에러가 난다.

org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'logging.level' to java.util.Map<java.lang.String, java.lang.String>

at org.springframework.boot.context.properties.bind.Binder.handleBindError(Binder.java:250)


🔴

logging:
level:
"org.hibernate":"ERROR"

이렇게 하면 snakeyaml 파싱 에러가 난다.

Caused by: org.yaml.snakeyaml.parser.ParserException: while parsing a block mapping

 in 'reader', line 39, column 3:

      pattern:

      ^

expected <block end>, but found Scalar

 in 'reader', line 43, column 20:

        "org.hibernate":"ERROR"

                       ^


at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockMappingKey.produce(ParserImpl.java:571)


답은 가까운 곳에 있다고 스프링부트 레퍼런스 24.8.2 Relaxed Binding에 있었다.

https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-external-config-relaxed-binding

When binding to Map properties, if the key contains anything other than lowercase alpha-numeric characters or -, you need to use the bracket notation so that the original value is preserved. If the key is not surrounded by [], any characters that are not alpha-numeric or - are removed. For example, consider binding the following properties to a Map:

acme:
  map:
    "[/key1]": value1
    "[/key2]": value2
    /key3: value3

The properties above will bind to a Map with /key1, /key2 and key3 as the keys in the map.


Map 프로퍼티들을 바인딩하기 위해서는 key에 해당하는 것을 []괄호로 감싸서 써야 한다는 것. 슬래시(/)를 사용할 수도 있지만 괄호로 감싸는 것이 예상치 못한 결과를 방지할 수 있다.


 아래 방법으로 한다.

logging:
level:
"[org.hibernate]": ERROR



아이콘 출처: https://github.com/spring-projects/spring-boot/issues/11972