본문 바로가기

더 나은 엔지니어가 되기 위해/지금은 안쓰는 자바

[스프링 부트 개념과 활용] 로깅

인프런에서 백기선님의 스프링부트 개념과 활용 강의를 듣고, 개인적으로 공부하며 핵심만 정리한 글입니다.

로깅 작업

1) 스프링5 부터 변경 사항

스프링 내 기본적인 로그 개념과 로거 종류는 이전에 포스팅한 [부스트코스 웹 프로그래밍] 로깅 참고하면 된다.

스프링5 부터 달라진 사항이 있다.
이전에는 pom.xml 에서 Commons Logging 을 exclusion 한 뒤, logback 을 로거로 붙여줘야 했다.
그런데 스프링 5부터는 내부에서 알아서 logback 으로 찍어준다.
대략 다음과 같은 플로우임.

Commons Logging(Spring 내장) -> SLF4j or Log4j2 - Logback

그래서 스프링5 부터는 그냥 써도 Logback 으로 찍히기 때문에, 별도의 설정이 필요없다.

2) 로거 설정

application.properties 에서 로거와 관련된 설정들을 할 수 있다.

  • spring.output.ansi.enabled : always 로 주면 콘솔에서 뜨는 로그에 색이 입혀짐.
  • logging.path : 로그 파일이 저장되는 디렉토리
  • logging.file : 로그 파일 이름 (default: spring.log)
  • logging.file.max-size : 저장할 로그 최대 용량 (default: 10MB)
  • logging.level.<패키지 경로> : 디버그 레벨 을 주면, 해당 패키지 내 로그들은 해당 로그레벨로 로깅됨.

예를 들면 다음과 같이 설정해볼 수 있다.

// application.properties

spring.output.ansi-enabled=always
logging.path=logs
logging.level.me.heumsi.springinit=DEBUG

3) 로거 사용

로거는 다음과 같이 필요한 곳에서 LoggerFactory.getLogger("Class 이름") 를 통해 사용할 수 있다.

@Controller
public class SampleController {
  Logger logger = LoggerFactory.getLogger(SampleController.java)

  logger.info("heumsi")
  ...
}

커스터마이징

1) 커스텀 로그 파일 설정

resources<logger 이름>-spring.xml 의 이름을 갖는 파일을 생성하여 수정하면 된다.
예를 들어, logback 로거에 관련한 설정은 다음과 같이 커스터마이징 할 수 있다.

// logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
  <logger name="org.springframework.web" level="DEBUG"/>
</configuration>

2) 로거 변경

pom.xml 의 일부를 다음과 같이 수정한다.
여기서는 기존의 로거를 log4j2 로 변경한다.

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
      <exclusion>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-logging</artifactId>
      </exclusion>
    </exclusions>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
  </dependency>
</dependencies>