[Spring] 로그

haazz·2024년 11월 18일

spring

목록 보기
5/5

로그란?

  • 로그는 프로그램의 동작을 추적해 문제를 해결하거나 성능을 분석하기 위한 목적으로 활용됩니다.
  • 스프링 부트는 기본적으로 로그백(Logback)이라는 로깅 도구를 사용하여 관리합니다.

SLF4J


  • SLF4J는 다양한 로그 프레임워크 (java.util.logging, logback, log4j)를 Facade 해주는 추상화 라이브러리입니다.
  • 로깅 프레임워크 간 마이그레이션을 가능하게 한다.

SLF4J는 세가지 구성요소를 갖습니다.

  1. SLF4J API
  • SLF4J 를 사용하기 위한 인터페이스를 제공
  • slf4j-api-{version}.jar 를 통해 사용
  • 반드시 slf4j 바인딩은 하나만 사용한다
    • SLF4J Binding은 SLF4J 인터페이스( = SLF4J API )를 로깅 구현체와 연결하는 어댑터 역할의 라이브러리
  1. SLF4J 바인딩
  • SLF4J 인터페이스를 로깅 구현체(logback 또는 log4j2)와 연결하는 어댑터 역할의 라이브러리
  1. SLF4J Bridging Modules
  • 다른 로깅 API로 Logger 호출을 할 때, SLF4J 인터페이스로 연결(redirect)하여 SLF4J API가 대신 Logger를 처리할 수 있도록 하는 어댑터 역할의 라이브러리
  • 다른 로깅 API ==> Bridge(redirect) ==> SLF4J API

로그 방법


1. System.out.println()

2. java.util.loggin.Logger

장점

  • 외부 라이브러리 사용 없이 로깅 가능합니다.

단점

  • 다른 라이브러리에 비해 속도가 느립니다.
  • custom 레밸에서 메모리 누수가 일어납니다.
  • Predefine 된 레벨의 개념이 명확하지 않습니다.

3. Log4j

  • 2015년 기준 개발 중단.
  • 가장 오래된 로깅 프레임워크
  • Apache의 Java기반 로깅 프레임워크
  • properties/xml 설정 파일을 통해 환경을 구성
  • 성능이 더 개선된 log4j2를 주로 사용합니다.

4. Log4j2

  • Facad 패턴으로 구현되어 다른 로깅 라이브러리와 사용 가능합니다.
  • 다른 로깅 라이브러리에 비해 비동기 성능이 뛰어납니다.
  • 파일뿐만 아니라 HTTP, DB, Kafka에 로그를 남길 수 있습니다.
  • Automatic Reloading 기능을 제공하여 별도에 재시작없이 설정을 변경하여 사용할 수 있습니다.

5. LogBack

  • SLF4J 구현체로 SpringBoot의 기본 log로 사용

  • spring-boot-starter-web안에 spring-boot-starter-logging의 logback이 기본적으로 포함

  • Automatic Reloading 기능 지원

  • 기본 로그백을 사용하면 문제점

    • 다시 실행할 경우 이전 로그가 삭제됩니다.
    • 로그가 쌓일수록 로그 파일의 용량이 무한대로 증가합니다.
    • 로그 시간이 시스템 시간이 아닌 UTC 시간으로 출력됩니다.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

class LogbackLogger {        
		private static Logger logger = LoggerFactory.getLogger(LogbackLogger.class);
		void method() {
        logger.trace("Trace");      
        logger.debug("Debug");      
        logger.info("Info");      
        logger.warn("Warn");      
        logger.error("Error");        
    }
}	

로그 레벨


  1. trace : debug 보다 훨씬 상세한 정보를 기록할 경우에 사용 (주로 디버깅에서 사용)
  2. debug : 디버깅 목적으로 사용
  3. info : 주요 이벤트나 상태 등의 정보를 출력 목적으로 사용
  4. warn : 문제가 발생할 가능성이 있는 상태를 경고하는 정보 출력
  5. error : 심각한 문제나 예외 상황 등에 대한 오류 정보를 출력
  6. fatal : 프로그램 기능의 일부가 실패하는 등 아주 심각한 문제에 관한 정보 출력

결론


  • 멀티 스레드 환경에서 로깅 양이 많고 로깅 성능이 중요한 경우 Log4j2를 사용하는 것을 고려해 볼 수 있습니다.
  • SLF4J를 활용해 Logback과 Log4j2 간의 마이그레이션을 편리하게 사용할 수 있습니다.
  • 저는 토이프로젝트를 진행하고 있기 때문에 Spring Boot의 기본 포함된 LogBack과 SLF4j를 사용하려고 합니다.

참고자료


SLF4J
Logging :: Spring Boot

profile
Developers who create benefit social values

0개의 댓글