Log

Fraise_KIM·2023년 7월 12일
0

1️⃣ Log

  • 로그(log) : 소프트웨어의 이벤트를 시스템의 상태 및 동작 정보를 시간 경과에 따라 기록하는 것
  • 소프트웨어 개발 과정 혹은 개발 후에 동작상태를 파악하여 문제가 발생했을 때 진단하고 해결하는데 도움이 된다.
  • 로깅(logging) : 로그를 기록하는 행위
  • Java 언어에서는 다양한 로깅 라이브러리를 지원한다.

2️⃣ 로깅 라이브러리

  • log4j
    • Apache의 자바 기반 로깅 프레임 워크로, 콘솔 및 파일 출력의 형태로 로깅이 가능하다.
    • xml이나 properties로 환경 구축
  • logback
    • log4j에 비해 필터링 정책과 기능이 향상되었다. ex) 로그인한 경우 logging 등
    • 서버 재시작 없는 자동 리로딩을 지원한다.
    • Springboot에서 spring-boot-stater-web에 기본 포함되어 있다.
  • log4j2
    • log4j의 다음 버전으로, logback처럼 필터링 및 자동 리로딩을 지원한다.
    • logback과의 차이
      • Multi Thread 환경에서 비동기 로거(Async Logger)의 경우 다른 로깅 프로엠워크보다 처리량이 더 많고 대기시간이 훨씬 짧다.
      • 람다식 및 Lazy Evaluation을 지원한다.

3️⃣ slf4j

  • Simple Logging Facade For Java의 약자
  • 자체 로깅 프레임워크가 아니라 logger 추상체로, 다른 로깅 프레임워크가 접근할 수 있도록 도와준다. (즉, log4j나 logback 같은 구현체의 인테페이스 역할을 한다.)
  • slf4j를 이용하면 코드를 일정하게 유지하면서 구현체의 전환을 통해 다른 로깅 프레임워크로의 전환을 쉽고 간단하게 할 수 있다.

4️⃣ 로그 레벨

TRACE모든 메세지를 표시하기 위한 정보
DEBUG개발 시 디버그 용도
INFO상태 변경, 서비스 동작 상태를 위한 정보
WARN실행에는 문제가 없지만 향후 잠재적인 문제를 알려주는 정보
ERROR의도하지 않은 오류 발생 정보. 요청을 처리하는 중에 문제가 발생하면 알려준다.
FATAL아주 심각한 에러가 발생한 상태

5️⃣ 로깅 라이브러리 성능 비교

  • log4j2는 Spring Boot에 기본으로 적용되어있는 logback 이후에 나온 라이브러리로 성능이 더 뛰어나다.
  • 멀티스레드 환경에서 Async Logger의 경우 Logback보다 처리량이 약 18배 더 높고 대기 시간이 훨씬 더 짧다.
  • 성능에 대한 자세한 내용 : https://logging.apache.org/log4j/2.x/performance.html


  • log4j
    • 콘솔 및 파일 출력의 형태로 로깅을 도와주며 xml, properties로 환경을 구성할 수 있다.

    • 설정 관련 : https://veneas.tistory.com/entry/Spring-Boot-스프링-부트-로그-설정-log4j2

      import org.apache.logging.log4j.LogManager;
      import org.apache.logging.log4j.Logger;
       
      class Log4jLogger {
              private static Logger logger = LogManager.getLogger(Log4jLogger.class);
       
              void method() {
                  logger.info("info log : {}", 1);
              }
      }

log4j 구성

Logger출력할 메시지를 Appender에게 전달
Appender전달된 로그를 어디에 출력할 것인지 결정(Console, File, JDBC 등)
Layout로그를 어떤 형식으로 출력할 것인지 결정

  • logback
    • SpringBoot에서는 기본 log여서 따로 의존성을 추가할 필요가 없다.

      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");
              }
      }

📂 참고자료

https://0soo.tistory.com/241

https://veneas.tistory.com/entry/Spring-Boot-스프링-부트-로그-설정-log4j2

0개의 댓글