자바 로깅 프레임워크
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
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>
참고
'Spring , JPA' 카테고리의 다른 글
Spring Data Envers 사용방법 - 간편하게 히스토리 테이블 관리하기 (0) | 2023.11.13 |
---|---|
Spring Cloud OpenFeign 사용법 (0) | 2023.11.12 |
Spring Boot , Java Application Graceful Shutdown (0) | 2023.03.13 |
[spring] Spring Webflux 란? (0) | 2023.01.17 |
[spring] Spring Webflux CRUD (0) | 2023.01.16 |