개요
개발을 진행하다 보면 로그(Log)는 디버깅, 모니터링, 이슈 해결에 필수적인 도구이다. Spring Boot는 기본적으로 로깅을 지원하지만, 개발 또는 운영 환경에서 로그 설정을 변경하거나 최적화할 필요가 자주 생긴다.
로그 파일이 쌓여 디스크 공간을 차지하거나, 로그 레벨이 너무 상세해 중요한 정보를 놓치는 상황도 발생할 수 있다. 최근 프로젝트에서 이러한 로그 설정 문제를 겪으면서 적절한 해결책을 찾았고, 이를 정리해 공유하고자 한다.
Spring Boot의 기본 로그 설정
Spring Boot는 기본적으로 Spring-JCL을 통해 로깅을 지원하며, 내부적으로 SLF4J와 Logback을 사용한다. 이를 통해 다양한 로깅 레벨을 지원하며, 애플리케이션이 구동될 때 별도의 설정을 하지 않아도 콘솔에 기본 로그가 출력된다. 하지만, 기본 설정만으로는 부족할 때가 많다. 특히, 디버깅이나 운영 환경에서 더 세밀한 로그 관리가 필요하다.
기본적으로 application.properties에서 간단한 로그 설정을 할 수 있다. 예를 들어, 로그 레벨을 INFO로 설정하려면 다음과 같이 작성한다.
logging.level.root=INFO
위 코드는 전체 애플리케이션에 적용될 기본 로그 레벨을 설정한 것이다. 하지만 이렇게만 설정할 경우 필요한 정보보다 많은 로그가 출력되거나, 반대로 중요한 로그를 놓칠 수도 있다.
로그 레벨 설정 방법
Spring Boot에서 로그 레벨은 TRACE, DEBUG, INFO, WARN, ERROR, FATAL로 구성된다. 이 중에서 TRACE와 DEBUG는 개발 중 상세한 로그를 출력할 때 유용하고, INFO는 운영 환경에서 애플리케이션의 상태를 파악하기에 적절하다.
특정 패키지나 클래스에만 로그 레벨을 다르게 설정할 수도 있다. 예를 들어, 특정 클래스의 디버깅 정보를 보고 싶다면 아래와 같이 설정할 수 있다.
logging.level.com.example.myapp=DEBUG
이 설정을 통해 com.example.myapp 패키지에 속한 클래스들의 로그 레벨을 DEBUG로 설정할 수 있다.
로그 파일 저장 위치 설정
로그가 콘솔에만 출력되면 로그 기록을 장기적으로 보관하거나 분석하는 데 한계가 있다. 이를 해결하기 위해 로그를 파일로 저장할 수 있다. Spring Boot에서 로그를 파일에 저장하려면 간단히 다음 설정을 추가하면 된다.
logging.file.name=logs/spring-boot-app.log
이 설정을 통해 logs 폴더 아래 spring-boot-app.log 파일에 로그가 저장된다. 파일 크기가 커질 것을 대비해, 로그 파일의 크기나 롤링 설정도 가능하다.
logging.file.max-size=10MB
logging.file.max-history=30
위 설정은 로그 파일이 10MB를 초과하면 새로운 로그 파일을 생성하고, 30개의 로그 파일을 보관하는 방식이다. 이를 통해 로그 파일이 지나치게 커지는 것을 방지하고, 오래된 로그는 자동으로 삭제될 수 있다.
외부 로깅 프레임워크와의 연동
Spring Boot는 기본적으로 Logback을 사용하지만, 필요에 따라 Log4j2 같은 외부 로깅 프레임워크로 변경할 수 있다. 이를 위해서는 의존성을 추가해야 한다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
그리고 application.properties 또는 application.yml에서 로깅 설정을 원하는 대로 조정할 수 있다. 예를 들어, Log4j2 설정 파일을 적용하려면 다음과 같이 설정한다.
logging.config=classpath:log4j2.xml
이제 log4j2.xml 파일에서 로그 출력 형식, 로그 레벨, 파일 저장 위치 등을 세밀하게 설정할 수 있다.
정리
Spring Boot에서의 로그 설정은 디버깅과 운영 환경 모두에서 중요한 역할을 한다. 기본 설정만으로는 충분하지 않은 경우가 많기 때문에, 로그 레벨을 조정하고, 로그를 파일에 저장하며, 필요하면 외부 로깅 프레임워크와 연동하여 로그를 효율적으로 관리해야 한다. 이 글에서 소개한 방법들을 통해 Spring Boot 애플리케이션의 로그 설정 문제를 해결할 수 있을 것같다.
'Spring' 카테고리의 다른 글
SpringBoot @Transactional이 동작하지 않는 이유와 해결법 (1) | 2024.10.02 |
---|---|
Spring @RequestBody로 데이터 바인딩 오류 (0) | 2024.10.01 |
Spring Boot Actuator 엔드포인트가 작동하지 않는 문제 해결 (0) | 2024.09.28 |
Spring Boot Auto Configuration 작동 원리 (0) | 2024.09.28 |
[스프링 핵심원리 기본]스프링 컨테이너와 스프링 빈 (0) | 2022.01.15 |
댓글