Spring , JPA

Spring Boot Logging (log4j, logback, log4j2)

seulseul 2023. 7. 9. 17:45

자바 로깅 프레임워크

log4j, logback, log4j2, apache common logging, slf4j 등 다양한 프레임워크 들이 있는데,

그중 log4j , logback, log4j2 을 비교해보겠습니다.

 

Log4J

참고 | https://logging.apache.org/log4j/1.2/index.html

 

  • 이중 가장 오래된 프레임워크로 로그 프레임워크에 대한 초반을 설정했다.
  • EOL 상태이며, 보안취약점으로 인해 Log4j2 로 업데이트를 권고하고 있다.

Logbak

  • Log4J 개발이 중단되며, Log4j 를 대체하기 위해 출시됐으므로 Log4J 의 성능 부분에 대한 개선 작업이 많이 이루어 진 프레임워크이다.
  • 자동 리로딩과 필터링 기능 지원
  • Spring Boot 에 기본적으로 적용돼있는 Logging  라이브러리

Log4j2

  • 자동 리로딩과 필터링 기능 지원
  • Asynchronous Logger(비동기 로거) 를 도입하여 Log4j 1.x 및 Logback보다 멀티 스레드 환경에서 10배 가량 높은 처리량을 가진다.
  • 대부분의 Appender에 Layout 사용이 가능해 출력 포멧이 자유로움
  • Syslog Appender 가 TCP, UDP 및 BSD syslog 를 지원
  • 람다 표현식 지원

 

Logbak vs Log4j2

 

https://logging.apache.org/log4j/2.x/performance.html

 

Spring Boot 프로젝트에 Log4j2 적용

dependency 추가 (build.gradle)

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
	all {
		// logback과의 충돌 방지
		exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
	}
}

dependencies {

	implementation 'org.springframework.boot:spring-boot-starter-log4j2' // log4j2 추가
    // ...
}

log4j2 파일 추가

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>

    <!-- 해당 설정파일에서 사용하는 프로퍼티-->
    <Properties>
        <property name="LOGS_PATH">/app/demo-api/log</property>
        <property name="LOGS_FILE_NAME">demo-api</property>
    </Properties>

    <Appenders>
        <!-- 콘솔 -->
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}:%-3relative] %-5level %logger{35} - %msg%n" />
        </Console>

        <!-- 파일 -->
        <RollingFile name ="RollingFile">
            <FileName>${LOGS_PATH}/${LOGS_FILE_NAME}.log</FileName>
            <FilePattern>${LOGS_PATH}/${LOGS_FILE_NAME}.%d{yyyy-MM-dd}.%i.log.gz</FilePattern>
            <PatternLayout>
                <Pattern>%d{yyyy-MM-dd HH:mm:ss} %5p [%c] %m%n</Pattern>
            </PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy size="100MB"/>
                <TimeBasedTriggeringPolicy interval = "1" modulate = "true"/>
            </Policies>
        </RollingFile>
    </Appenders>

    <Loggers>
       
        <!-- Root 보다 우선 순위가 높다. -->
        <logger name="com.sample.api" level="INFO" additivity="false">
            <AppenderRef ref="CONSOLE" />
            <AppenderRef ref="RollingFile" />
        </logger>

        <!-- FATAL, ERROR, WARN, INFO, DEBUG, TRACE -->
        <Root level="INFO">
            <AppenderRef ref="CONSOLE" />
            <AppenderRef ref="RollingFile" />
        </Root>
    </Loggers>
</Configuration>

 

 


참고

Apache Log4j2 Performance

Spring Boot 공식문서 -  7.로깅