목차
0. 환경
- windows10
- openjdk version "11" 2018-09-25
- IntelliJ Tool
- Spring Boot 2.5.6
- Gradle Project
- MyBatis + Mysql + HikariCP를 이용해 DB(Mysql) 연동할 프로젝트입니다.
1. 성능
- log4j2는 Spring Boot에 기본으로 적용되어있는 logback 이후에 나온 라이브러리로 성능이 더 뛰어납니다.
- 멀티스레드 환경에서 Async Logger의 경우 Logback보다 처리량이 18배 더 높고 대기 시간이 훨씬 더 짧다고 합니다.
- 성능에 대한 자세한 내용은 https://logging.apache.org/log4j/2.x/performance.html를 참고하세요.
2. Log4j2 의존성 추가
- build.gradle에 log4j2 의존성을 추가합니다.
- logback이랑 충돌을 방지하기 위해 spring-boot-starter-logging를 제외합니다.
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'
}
3. 설정파일
- Log4j2.xml 파일을 추가합니다.
- resources/log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<!-- 해당 설정파일에서 사용하는 프로퍼티-->
<Properties>
<property name="LOGS_PATH">D:\test_logs</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}/log4j2.log</FileName>
<FilePattern>${LOGS_PATH}/log4j2.%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>
<!-- Application Loggers -->
<!-- Root 보다 우선 순위가 높습니다. -->
<logger name="com.test.api.controller" level="INFO" additivity="false">
<AppenderRef ref="console" />
<AppenderRef ref="RollingFile" />
</logger>
<logger name="com.test.api.service" 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>
4. 테스트
package com.test.api.controller;
import lombok.extern.log4j.Log4j2;
import org.springframework.web.bind.annotation.GetMapping;
@Log4j2
@RestController
public class TestController {
@GetMapping(value = "/log")
public void log() throws Exception {
//FATAL, ERROR, WARN, INFO, DEBUG, TRACE
log.fatal("FATAL");
log.error("ERROR");
log.warn("WARN");
log.info("INFO");
log.debug("DEBUG");
log.trace("TRACE");
}
}
[콘솔 출력]
- logger level을 INFO이기 때문에 debug와 trace는 출력되지 않았습니다.
- <logger name="com.test.api.controller" level="INFO" additivity="false">
- TRACE < DEBUG < INFO < WARN < ERROR < FATAL
[파일 생성]
5. 취약점 조치
- 최근에 log4j2 취약점이 등장했습니다. 2.15 버전 미만인 경우 아래의 링크로 접속해 버전 업데이트 해주세요.
https://veneas.tistory.com/entry/Spring-Boot-스프링-부트-Log4J2-취약점-조치-Log4J2-버전-업데이트
'Backend > Spring' 카테고리의 다른 글
[Spring] Lombok 자동 생성자 생성 (@AllArgsConstructor, @RequiredArgsConstructor) (0) | 2021.11.25 |
---|---|
[Spring Boot] 스프링 부트 SQL 로그 설정 (Log4jdbc) (0) | 2021.11.23 |
[Spring Boot] MyBatis 사용법 (DAO) (0) | 2021.11.21 |
[Spring Boot] MyBatis 사용법 (@Mapper, @MapperScan) (2) | 2021.11.20 |
[Spring Boot] MySQL + MyBatis + HikariCP 연동 (Mysql 연동) (0) | 2021.11.16 |