먼저 간단하게 Logging이 무엇인지에 대해서 설명하겠다. Logging은 시스템에서 발생하는 이벤트나 정보를 기록하는 과정이다. 이는 시스템의 문제를 해결하는 데 중요한 역활을 한다.
Spring boot는 내부 로깅 즉 Spring boot 자체에 기본적으로 탑재된 로깅 기능을 의미한다. 즉 Spring Boot 애플리케이션을 개발할 때 별도의 로깅 라이브러리를 추가하지 않아도 기본적인 로깅 기능을 사용할 수 있으며 주로 Java Util Logging, Log4j2, Logback가 있다.
Spring Boot에는 프로젝트를 간편하게 설정해주는 Starters라는 기능이 있다. Starters를 사용하면 기본적으로 Logging은 Logback라이브러리에 의해 수행이 된다. 하지만 여러 라이브러리들이 서로 의존하는 경우가 있다. 이러한 의존 라이브러리들이 Java Util Logging, Commons Logging, Log4J, 또는 SLF4J를 사용한다고 해도 Spring Boot는 적절한 Logback 라우팅을 통해 모두 문제 없이 동작하도록 설정이 되어 있다.
스프링 부트의 Starters가 기본적으로 logback을 지원해주며 라우팅 기술을 통하여 log4j2와 같은 라이브러리를 사용하더라도 스프링 부트는 결국 logback으로 전달되기때문에 로그설정은 기본적인 logback설정만 하면 되는것이다.
예시
교통체계처럼 각 로깅 메시지 목적지(Logback)에 도달하도록 하는 경로하는 경로 설정을 의미한다. spring boot는 이러한 라우팅 기능을 통하여 서로 다른 로깅 라이브러리를 사용하는 의존 라이브러리에서 발생하는 로그 메시지도 logBack으로 잘 전달되도록 보장한다.
스프링 부트를 사용하면 별도 설정 없이 logback을 기본 로깅 라이브러리로 사용하면서, 다른 로깅 라이브러리를 사용하는 의존 라이브러리와도 호환되는 효과적인 로깅 환경을 구축할 수 있다.
로깅 메시지를 우편물로 생각하기
정리 :스프링부트는 기본적으로 Logback을 사용하지만 다른 Log4j, Logback, JUL도 사용할 수 있도록 환경을 구축할 수 있으며 다른 의존 라이브러리도 결국 Logback에 도달된다는 것이다.
서블릿 컨테이너 또는 어플리케이션 서버에 애플리케이션을 배포할 때 Java Util Logging(JUL)API를 사용하여 수행된 로딩은 애플리케이션 자체의 로그로 라우팅이 되지 않는다.
이는 컨테이너 자체나 다른배포된 애플리케이션에서 수행된 로깅이 사용자의 애플리케이션 로그에 포함되지 않도록 하는것이다.
따라서 서버에 애플리케이션을 배포할 때 JUL API이외에도 다른 로깅 기능을 설정하거나 서버 프로그램의 자체 로깅 설정을 별도로 진행해야 한다.
서버 로깅 : 톰캣 자체로그
[2023-11-14 15:27:53.786] [INFO] [main] org.apache.catalina.startup.Catalina - Server startup in 2504 ms
[2023-11-14 15:27:54.123] [INFO] [localhost-startStop-1] org.apache.catalina.core.StandardEngine - Starting service Catalina
[2023-11-14 15:27:54.133] [INFO] [localhost-startStop-1] org.apache.catalina.core.StandardService - Starting service Catalina
[2023-11-14 15:27:54.141] [INFO] [localhost-startStop-1] org.apache.catalina.core.ApplicationContext - Initializing Spring embedded WebApplicationContext
[2023-11-14 15:27:54.445] [INFO] [localhost-startStop-1] org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 312 ms
사용자 로깅 : spring boot로그
[2023-11-14 15:27:54.789] [INFO] [main] com.example.demo.Application - Started DemoApplication in 2.5 seconds
[2023-11-14 15:27:55.012] [INFO] [main] com.example.demo.controller.HomeController - GET /
[2023-11-14 15:27:55.013] [INFO] [main] com.example.demo.controller.HomeController - Welcome to the home page!