Development Logs/Spring Ecosystem

[Spring Boot + GW] Log4j2 활용하여 Logging 설정하기(feat. Logback vs Log4j2 선택)

유뱅유뱅뱅 2024. 12. 30. 11:39
반응형

https://yubh1017.tistory.com/95

 

[Spring Boot] Spring Boot에서의 Logging Pattern 설정

Spring Boot에서의 Logging Pattern 설정을 위해 Log와 관련된 간단한 지식을 정리한 글입니다.Logging Pattern 설정과 관련된 내용입니다.1. Logback이란?Java에서 Log 기록을 위한 Open-Source framework.  SLF4J의 구현

yubh1017.tistory.com

위에서는 Logback을 이용한 Logging Pattern 설정하는 법에 대해 설명을 했었습니다.

이번에는 Log4j2를 활용하여 Logging Pattern을 설정하는 방법에 대해 알아보겠습니다. 기본적인 로깅 설정들은 Logback 활용한 방식과 유사하며, Spring Cloud Gateway에서 Log4j2를 활용한 이유를 Logback과 Log4j2를 비교를 통해 중점적으로 알아보겠습니다.


1. Log4j2 이란?

  • Log4j2는 Java 기반 애플리케이션에서 로깅(logging)을 수행하는 데 사용되는 강력하고 유연한 로깅 프레임워크입니다. Apache Software Foundation에서 개발되었으며, 기존 Log4j 1.x의 한계를 극복하고 더 나은 성능과 확장성을 제공하기 위해 완전히 재설계되었습니다.
  • Spring Boot에서 Log4j2를 사용하려면 spring-boot-starter-logging 대신 spring-boot-starter-log4j2를 추가해야 합니다:

 

1.1. 주요 기능 및 장점

1) 동적 재구성

  • 비동기 로깅을 통한 높은 성능을 자랑합니다.
  • JSON, XML 등 다양한 포맷을 지원합니다.
  • 플러그인을 통해 기능 확장 가능합니다.

2) 확장성

  • 다양한 출력 대상(Appender) 지원합니다.

3) 유연한 출력

  • GC-Free 로깅으로 지연을 감소시킵니다.

4) 고성능

  • 설정 파일을 수정하면 애플리케이션 재시작 없이 변경사항을 적용할 수 있습니다.

 

2. Log4j2 gradle 설정 및 설정파일 (log4j2-local.xml 로 설정)

2.1. gradle 설정

  • Log4j2를 사용하려면 spring-boot-starter-logging 대신 spring-boot-starter-log4j2를 추가해야 합니다
implementation 'org.springframework.boot:spring-boot-starter-log4j2'

 

2.2. 로깅 설정 파일(log4j2-local.xml 로 설정)

<Configuration>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>
  • 위는 간단한 예제로, Appender(로그 출력대상)이 콘솔인 경우 간단하게 작성한 것 입니다.
  • 그외 FileAppender 또는 RollingFileAppender를 통해 로그를 출력할 대상을 정할 수 있습니다.

 

3. Spring Cloud Gateway 에서 Log4j2를 사용한 이유

3.1. Logback이 적합한 경우

  1. Spring Boot를 기본 설정으로 사용하는 경우: 별도의 설정 없이 간단히 로깅을 사용하고 싶을 때 사용합니다.
  2. 일반적인 로그 처리: 성능과 설정을 간단하게 사용하고 싶을 때 사용합니다.

3.2. Log4j2가 적합한 경우

  1. 고성능 비동기 로깅: 높은 TPS를 처리하거나 지연을 최소화해야 하는 경우 사용합니다.
  2. 동적 설정이 필요한 경우: 애플리케이션 재시작 없이 설정 변경을 적용해야 할 때 사용합니다.
  3. 확장성과 유연성이 중요한 경우: 다양한 포맷(JSON, YAML)을 사용하거나, 복잡한 로깅 구성이 필요한 경우 사용합니다.

3.3. 결론

  1. 운영기준 매초 5000RPS 이상을 제공하는 Spring Cloud Gateway를 Migration하기 위해 Log4j2를 사용하였습니다.
  2. Spring Cloud Gateway의 특징에 맞춰 각 요청마다 비동기적으로 로깅을 하기위해 비동기 로깅시 더 높은 성능을 제공하는 Log4j2를 사용하였습니다.
  3. 개발팀을 위한 Logging 시스템 + 회사(전사)에서 요구하는 Logging 시스템을 구분하여, 복잡한 로깅 구성을 위해 Log4j2를 사용하였습니다.

 

반응형