[08] Logging

MIIIN·2021년 10월 5일
0

Spring Boot

목록 보기
8/9
post-thumbnail

Spring Boot는 모든 내부 로깅을 위한 Commons Logging을 사용하지만, 기본 로그 구현은 열어둔다. Java Util Logging, Log4J2 그리고 Logback에 대한 기본 구성들이 제공된다. 각 로거들은 콘솔 출력와 선택적인 파일 출력을 사용할 수 있도록 사전 구성된다.

기본적으로 "Starts"를 사용한다면, Logback이 로깅을 위해 사용된다. Java Util Logging, Commons Logging, Log4J, or SLF4J를 사용하는 의존 라이브러리들이 모두 제대로 작동하도록 하기 위해 적절한 Logback 라우팅이 포함된다.

Java를 위한 많은 Logging Framework들이 있지만, 일반적으로 로깅 의존 라이브러리들을 바꿀 필요는 없고 Spring Boot 기본값은 잘 작동된다. 애플리케이션을 서블릿 컨테이너(Tomcat)나 애플리케이션 서버에 배포할 때, Java Util Logging API를 통해 수행된 Logging API는 애플리케이션 로그에 라우팅되지 않는다. 따라서 , 컨테이너 또는 컨테이너에 배포된 다른 애플리케이션들에서 수행되는 Logging이 현재 애플리케이션 로그에 나타나지 않는다.

💬 Log Format

다음은 예제 로그이다.

2019-03-05 10:57:51.112  INFO 45469 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/7.0.52
2019-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1358 ms
2019-03-05 10:57:51.698  INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2019-03-05 10:57:51.702  INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
  • Data & Time : 밀리초 정밀도와 정렬
  • Log Level : ERROR, WARN, INFO, DEBUG, TRACE
  • Process ID
  • --- 구분자는 실제 로그 메세지의 시작을 구분한다.
  • Thread Name : [...] 사각 괄호
  • Logger Name : 소스 Class Name

💬 Console Output

기본 Log 구성은 메시지를 기록할 때 콘솔에 반영한다. 기본값으로 ERROR, WARN, INFO 수준의 메시지들이 기록되며, 애플리케이션을 시작할 때 "--debug" 옵션을 넣거나 application.properties에 debug=true를 지정하여 debug를 활성화할 수 있다.

// shell
java -jar myapp.jar --debug

// application.properties
debug=true

debug 모드를 사용하면, 핵심 로거(내장 컨네이너, Hibernate, Spring Boot)들이 더 많은 정보를 출력하도록 구성된다. debug 모드를 활성화하여도 모든 메시지들을 DEBUG 수준으로 기록하도록 구성되지는 않는다.

또는 애플리케이션을 시작할 때 "--trace" 옵션을 넣거나 application.properties에 trace=true를 지정하여 trace 모드를 활성화할 수 있다.

// shell
java -jar myapp.jar --trace

// application.properties
trace=true

trace 모드를 사용하면, 핵심 로거(내장 컨테이너, Hibernate 스키마 생성, 전체 Spring portfolio)들에 대한 trace 로깅을 할 수 있다.


💬 File Output

기본적으로 Spring Boot는 콘솔에만 로그를 기록하고 파일에 로그를 쓰지 않는다. 만약 콘솔 출력뿐만 아니라 파일에 로그를 쓰고 싶다면, logging.file.name이나 loggin.file.path 속성을 설정한다.

logging.file.namelogging.file.path예시설명
(none)(none)콘솔에만 로깅
파일명(none)my.log파일명은 절대경로나 현재 폴더의 상대경로로 설정
(none)폴더명/var/log폴더명은 절대경로나 현재 폴더의 상대경로로 설정. (파일명:spring.log)

로그 파일들은 콘솔 출력처럼 10MB에 도달하면 교대되며 기본적으로 ERROR, WRAN, INFO 수준의 메시지들을 기록한다.


💬 File Rotation

Logback을 사용하면, application.properties 파일에 로그 교대 설정을 바꿀 수 있다. 다른 로깅 시스템에서는 직접 교대 설정을 구성해야만한다. (Log4J2는 log4j.xml 파일을 추가해야한다.)

속성설명
logging.logback.rollingpolicy.file-name-pattern파일명 패턴
logging.logback.rollingpolicy.clean-history-on-start애플리케이션 시작시 파일 이력 초기화 여부
logging.logback.rollingpolicy.max-file-size로그 파일 최대 크기
logging.logback.rollingpolicy.total-size-cap삭제되기 전 로그 파일의 총 개수
logging.logback.rollingpolicy.max-history로그 파일을 유지할 일수 (기본 7일)

💬 Log Levels

모든 지원되는 로깅 시스템들은 로그 수준을 Spring Environment에 설정할 수 있다. 로그 수준은 TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF 중 하나를 설정하며 root logger는 logging.level.root를 사용하여 구성할 수 있다.

logging.level.root=warn
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error

💬 Log Groups

관련된 로거들을 그룹화하여 모두 같은 시점에 구성되도록 하면 유용하다.

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

Spring Boot는 다음의 사전 정의된 로깅 그룹들을 포함한다.

그룹 loggers
web org.springframework.core.codec
org.springframework.http
org.springframework.web
org.springframework.boot.actuate.endpoint.web
org.springframework.boot.web.servlet.ServletContextInitializerBeans
sql org.springframework.jdbc.core
org.hibernate.SQL
org.jooq.tools.LoggerListener

💬 Log Shutdown Hook

애플리케이션 종료시 로깅 자원들을 풀어 주기 위해, JVM이 종료될 때 로그 시스템 제거를 유발하는 Shutdown Hook이 제공된다. Shutdown Hook은 애플리케이션이 war 파일로 배포되지 않으면 자동적으로 등록된다.


💬 Log Configuration 커스텀

적절한 라이브러리들을 classpath에 포함하여 여러 로깅 시스템들을 활성화할 수 있다. 그리고 classpath의 root에서나 Spring Environment 속성인 logging.config로 기술된 위치에서 적절한 구성 파일로 로깅 시스템들을 커스텀화 할 수 있다.

// root의 logback 폴더내 logback.xml 파일
logging.config=classpath:logback/logback.xml

로깅 시스템에 따라 다음의 파일들을 불러온다.

Logging System커스텀 파일
Logbacklogback-spring.xml, logback.xml
Log4j2log4j2-spring.xml, log4j2.xml
Java Util Logginglogging.properties

Logback에 관한 자세한 내용은 아래에서 확인하자!
https://velog.io/@pymin1012/Logback

🎵 다음은 애플리케이션에 여러 언어 버전을 설정하는 방법을 확인한다.

profile
백엔드개발자

0개의 댓글