기본적으로 Spring Boot는 logback이라는 로깅 프레임워크를 제공한다.
그래서 로깅 설정을 하지않아도 Spring Boot 프로젝트를 실행하면 이렇게 알록 달록한 색상으로 로그가 찍히는 것을 확인할 수 있다.
log4j2를 권하는 것같아 Spring Boot 프로젝트에서 logback 대신 log4j2를 사용하는 방법을 정리하려고 한다.
logback을 사용할 때 library에는 logback-class,logback-core,spring-boot-starter-logger .jar파일을 의존하고 있다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- logback exclusion -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
log4j2를 사용하게 설정한 후 library를 살펴보면 logback관련 .jar파일은 없어지고 log4j-core, spring-boot-starter-log4j2.jar 파일을 의존하는 것을 볼 수 있다.
logging.config=classpath:log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- status : log4j2 내부적으로 로그를 남기는데 이때 어떤 레벨로 로그를 만길지 지정하는 것이다-->
<!-- monitorInterval : 설정한 초단위 당 한 번씩 log4j2.xml이 변경되었는지 감지하여 재구동 없이 바로 적용시켜준다-->
<Configuration status="info" monitorInterval="30">
<Properties>
<!-- 동적으로 파일 path를 지정
자바 시스템 프로터티의 filename을 읽어서 logs 밑에 filename(동적)이라는 이름으로 파일을 만들어 log를 찍는다
만약 filename이 없다면 default.log라는 이름으로 파일을 만들겠다
-->
<Property name="filename">logs/${sys:filename:-default.log}</Property>
</Properties>
<!-- 1. 어떤 target에 로그를 출력할 것인지 정의한다.
target: file,console, kafka
2. 보낼 때 어떤 pattern으로 보내는지도 정의한다.-->
<!-- 'name은 'ref'와 같아야 한다 -->
<Appenders>
<Console name="ConsoleLog" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="FileLog" fileName="${filename}">
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
</File>
</Appenders>
<!-- Appender를 실제로 매핑시켜주는 역할이다 -->
<!-- 해당 name 위치의 logging 설정 -->
<Loggers>
<Logger name="com.ssafy.maytrip.controller" level="debug" additivity="false">
<AppenderRef ref="ConsoleLog"/>
</Logger>
<Root level="info">
<AppenderRef ref="ConsoleLog"/>
<AppenderRef ref="FileLog"/>
</Root>
</Loggers>
</Configuration>
콘솔과 file에 지정한 log가 찍힌다.
filename을 지정하지 않았기 때문에 default.log파일에 log가 기록된는 것을 확인할 수 있다.
처음엔 문서만 보고 따라했지만 intellij에서 maven update를 처음 했는데 잘 되지 않아 시간을 끌었다. 유튜브에서 Ctrl+shift+O라는 단축어를 알려주기 전까지 내 maven이 왜 update되지 않는지 몰랐다. 애초에 업데이트 하는 방법을 잘못 된거 같다.
생각보다 logging 작업이 쉬워서 다음 프로젝트에 무리 없이 쓸 수 있겠다.
참고
https://www.youtube.com/watch?v=5dCIUMmJJR0
https://logging.apache.org/log4j/2.x/manual/configuration.html