스프링 부트는 기본적으로 commons logging을 사용한다. 그렇지만 보통 SLF4j를 사용한다.(리소스 코드에서도 마찬가지로 SLF4j를 쓰면 된다.)
Commons Logging과 SLF4j는 로거 퍼서드이다. 실제로 로깅을 하는 것이 아니라, 로거 API들을 추상화 해놓은 인터페이스이다.
이런 로거 퍼서드를 사용하면, 로거를 바꾸어 낄 수 있다는 장점이 있다.
스프링 5 부터는 SLF4j를 사용하기 위해서 Spring-JCL이라는 모듈을 만들었다. Spring-JCL은 Commons Logging을 컴파일 시점에 SLF4j나 Log4j2로 변경하는 기능을 가진 모듈이다. SLF4j는 최종 로거를 의존성에 근거하여 고르게 된다.
결국 우리는 Commons Logging 이나, SLF4j를 쓰면 되는데, Commons Logging을 쓰더라도 어차피 SLF4j로 바뀌고 SLF4j가 Logback 로거를 선택한다. 최종적으로는 Logback을 쓰게 되는 것이다.
logback이 SLF4j의 구현체이다.
로깅의 기본 포맷은
[날짜 | 시간 | 로그레벨 | PID | 쓰레드이름 | 풀 패키지 경로&클래스 이름 | 메세지]이다.
실행시, --debug나, -Ddebug 명령을 주면, 디버그레벨의 로그도 찍힌다.(embedded container, Hibernate, Spring Boot 만)
모든 메세지를 전부 디버그 모드로 하고 싶으면 --trace 명령어를 주면된다.
컬러로 로그를 찍고 싶으면 application.properties에 spring.output.ansi.enabled=always를 적어주면 된다.
로그를 파일로 출력받고 싶다면 application.properties에 logging.file.path=
(지정된 경로에 로그남김)를 사용하면 된다. 지정된 경로에 적어준 디렉토리가 생성되고 spring.log라는 파일이 생긴다.
기본적으로는 10M를 저장하고, 아카이빙 해주지만, 설정 변경 해줄 수 있다.
패키지마다 로그 레벨을 설정해 줄 수도 있다. application.properties에 logging.level.패키지경로=로그레벨
를 줘서 사용한다.
slf4j로 로거를 만들어 찍어줄 수도 있다.
로그 컨트롤을 하고 싶다면 로그 파일을 생성해주면 된다.
resources에 logback.xml 이나 logback-spring.xml로 만들어준다.
logback-spring.xml로 만들어 줄 경우, 스프링부트가 추가기능을 제공해준다. logback 설정 파일안에서 프로파일이나 Environment 변수를 사용할 수 있게 해준다.
아래의 코드를 logback-spring.xml에 적어준다.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
<logger name="org.springframework.web" level="DEBUG"/>
</configuration>
부분에 아까 프로퍼티에서 logging.level.패키지경로=로그레벨
해준 것 처럼 패키지이름과 로그레벨을 설정해주면된다.
톰캣을 뺐을 때 처럼 spring-boot-starter-web 에서 logging을 빼고 log4j2를 넣어주면 된다.
log4j2도 SLF4j를 사용해서 쓰게되는 것이다.
Log4j2를 커스터마이징 하고 싶다면 log4j2-spring.xml로 만들어주면된다.
정리 감사해요!! 잘 읽었습니다