프로그래밍/Spring

[Spring] Spring Boot 로깅 (Logging) 공식 문서 내용 정리

Jay Tech 2019. 8. 6. 22:55
반응형

스프링 Log reference

스프링 부트 공식 문서의 Log 부분을 번역하며 정리해보았다.

26.Logging

스프링 부트는 모든 내부로깅을 Commons Logging을 사용하지만 근본적인 로깅 구현은 남겨두었다. Java Util Logging, Log4J2, Logback은 디폴트 설정들을 제공한다. 각각의 경우 로거는 선택적 파일출력과 함께 콘솔 출력을 사용하도록 사전에 구성이 된다.

디폴트로, Starter를 사용을 한다면 Logback이 기본으로 사용된다. Java Util Logging, Commons Logging, Log4J, Slf4J를 모두 사용하는 의존적 라이브러리가 올바르게 작동하도록 적절한 Logback 라우팅이 포함된다.

자바를 사용하는데 많은 로깅 프레임워크들이 있다. 위에 설명한 것들이 너무 복잡해보인다고 걱정하지 말아라. 일반적으로 로깅 의존성을 바꿀 필요가 없고 스프링부트를 쓴다면 디폴트 설정을 써도 괜찮다.

26.1 로그 포맷

스프링부트에서 디폴트 로그 포맷은 다음과 같다.

2014-03-05 10:57:51.112 INFO 45469 --- \[ main\] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/7.0.52 
2014-03-05 10:57:51.253 INFO 45469 --- \[ost-startStop-1\] o.a.c.c.C.\[Tomcat\].\[localhost\].\[/\] : Initializing Spring embedded WebApplicationContext 
2014-03-05 10:57:51.253 INFO 45469 --- \[ost-startStop-1\] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1358 ms 
2014-03-05 10:57:51.698 INFO 45469 --- \[ost-startStop-1\] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to \[/\] 
2014-03-05 10:57:51.702 INFO 45469 --- \[ost-startStop-1\] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: \[/\*\]

시간과 날짜: 밀리세컨까지 나오고 쉽게 소팅가능하다.

로그 레벨: ERROR, WARN, INFO, DEBUG, TRACE

TRACE < DEBUG < INFO < WARN < ERROR

INFO로 디버그 레벨을 설정하면 그것 보다 높은 로그 레벨의 메세지가 모두 출력된다.

프로세스 아이디

'—-' 구분자는 실제 로그 메세지를 구분하기 위해 쓰인다.

쓰레드 이름: 대괄호안에 나오는 것

로거이름: 소스 클래스 이름

로그 메세지

  • 참고로 Logback은 FATAL 레벨이 없고 ERROR에 대응된다.

26.2 콘솔 아웃풋

디폴트 로그 설정은 쓰여질 당시 메세지가 에코가 된다. 기본적으로, ERROR, WARN, INFO 레벨의 메세지가 로깅이 된다. 디버그 모드로 실행을 하려면 —debug 플래그를 주면 된다.

java -jar myapp.jar --debug

혹은 application.properties에 debug=true로 명시해도 된다.

디버그 모드가 활성화 되었을 때, 핵심 로거를 선택하면 (임베드된 컨테이너, Hibernate, Spring Boot) 추가정보를 보여주게 구성된다. 하지만 디버그 모드를 활성화 해도 디버그 수준의 모든 메세지를 기록하도록 프로그램이 구성되지는 않는다.

대체로, —trace 플래그를 주거나 (application.properties에 trace=true)를 주어 "trace"모드를 활성화 할 수 있다.

26.2.1 컬러 코드 아웃풋

터미널이 ANSI를 지원한다면 컬러 아웃풋은 가독성을 높인다. spring.output.ansi.enabled를 통해 설정할 수 있다. (ALWAYS, DETECT, NEVER)

코드 컬러링은 %clr 를 통해서 설정할 수 있다. 간단한 형태에서도 알 수 있듯이 변환기 색은 다음과 같이 로그 레벨에 따른 출력이다.

%clr(%5p)

FATAL, ERROR: Red

WARN: Yellow

INFO, DEBUG, TRACE: Green

다른 방법으로는 옵션을 주어 색을 지정할 수 있다. 예를들어, 노란색으로 텍스트를 만들고 싶다면 다음과 같이 하면 된다.

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

blue, cyan, faint, green, magenta, red, yellow 가 지원된다.

26.3 파일 아웃풋

기본적으로 스프링 부트는 로그파일을 쓰지 않고 오직 콘솔에만 로그를 찍는다. 콘솔 아웃풋 뿐만 아니라 파일로 쓰고 싶다면 logging.file 또는 logging.path를 써야 한다. (예를들어 application.properties 안에)

로그파일들은 10MB에 도달했을 시 로테이트를 하고 아웃풋 콘솔은 기본적으로 ERROR, WARN, INFO가 찍힌다. 사이즈 제한은 logging.file.max-size로 설정할 수 있다. 이미 로테이트된 파일들은 logging.file.max-history를 설정해야만 제대로 저장돈다.

26.4 로그 레벨

지원하는 로깅 시스템들은 스프링 환경설정을 통해 로거 레벨을 설정할 수 있다.

logging.level.<logger-name>=<level>

을 통해서 할 수 있는데 level은 TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF중 한 가지다. root 로거는 logging.level.root를 통해 설정할 수 있다.

다음 예는 잠재적 설정을 보여준다.

logging.level.root=WARN 
logging.level.org.springframework.web=DEBUG 
logging.level.org.hibernate=ERROR

26.5 로그 그룹

관련있는 로거끼리 묶어서 동시에 설정되게 하는 것이 종종 유용하다. 예를들어, 모든 톰캣 관련한 로거들을 레벨들을 종종 바꾸는데 탑 레벨 패키지를 쉽게 기억하지 못하는 것과 같다.

이것을 위해서 스프링부트는 스프링 환경을 통해서 로깅 그룹을 할 수 있다. 예를들어, application.properties에 톰캣 그룹핑을 정의할 수 있다.

logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat

한번 정의하면 한줄로 로거 그룹의 레벨을 변경할 수 있다.

logging.level.tomcat=TRACE

스프링 부트는 기본적으로 사용할 수 있는 다음과 같은 미리 정의된 로깅 그룹들을 제공해준다.

Name: web

Loggers: org.springframework.core.codec, org.springframework.http, org.springframework.web

Name: sql

Loggers: org.springframework.jdbc.core, org.hibernate.SQL

26.6 커스텀 로그 설정

다양한 로깅 시스템들은 클래스패스에 적절한 라이브러리를 추가하거나 logging.config같은 스프링 환경 설정을 통해서 더 커스텀을 하여 적합한 환경을 만들 수 있다.

로깅이 ApplicationContext가 만들어지기 이전에 초기화 되므로 스프링의 @Configuration안의 @PropertySources로 제어할 수 없다. 로깅 시스템을 바꾸거나 완전히 비활성화하려면 시스템 환경설정을 통한 방법 밖에 없다.

 

 

가능하다면 우리는 -spring 어미를 붙이는 것을 추천한다. (예를들어, logback.xml 대신에 logback-spring.xml ) 표준 설정 위치를 사용하면 Spring은 로그 초기화를 완전히 제어할 수 없다.

참고: 'executable jar' 실행가능한 jar파일을 사용할 때 Java Util Logging은 이슈가 있는 것으로 보이기 때문에 그것을 실행할 때는 Java Util Logging을 쓰는 것을 피해라.

 

 

26.7 로그백 확장

// TODO

26.7.1 프로필 설정

// TODO

26.7.2 환경 설정

// TODO

반응형