반응형
log4j(Log For JAVA)란?
Java 기반 Logging 유틸리티로써 debug용 도구로 주로 사용된다.
애플리케이션에 문제 발생 시 문제의 위치를 빠르고 정확히 파악하기 위해 사용한다.
또한 성능 및 속도에 영향을 미치지 않고 편리하게 사용할 수 있다.
log4j의 특징
- 속도 최적화
- thread-safe 하다. 즉, 멀티스레드 환경에서도 안전
- properties 파일과 xml 형식으로 실행 중 수정 적용 가능
- 5단계의 레벨의 장애를 사용(DEBUG < INFO < WARN < ERROR < FATAL)
- 출력 layout과 대상 및 방식을 쉽게 설정
구현 예제
1. build.gradle 설정
configurations {
...
// logback 의존성 제거
// Spring Boot에는 logback이 기본 logging이기 때문에 의존성을 제거한다.
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
dependencies {
...
// log4j2
implementation 'org.springframework.boot:spring-boot-starter-log4j2' // 의존성 주입
...
}
2. application.yml 설정
...
logging:
config: classpath:log4j2.xml # log4j2 설정파일 경로 설정
3. log4j2.xml 생성
- RollingFile.fileName : 저장할 로그 파일
- RollingFile.filePattern : Rolling될 로그 파일
RollingFile.filePattern | 설명 |
%d{yyyy-MM-dd-hh-mm} .log.zip | TimeBasedTriggeringPolicy 태그에 interval = 1일떄 1분마다 Rolling |
%d{yyyy-MM-dd-hh} .log.zip | TimeBasedTriggeringPolicy 태그에 interval = 1일떄 1시간마다 Rolling |
%d{yyyy-MM-dd} .log.zip | TimeBasedTriggeringPolicy 태그에 interval = 1일떄 1일마다 Rolling |
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info" monitorInterval="30">
<!--변수 설정-->
<Properties>
<Property name="BASE_DIR">./logs</Property> <!--로그 파일 경로-->
<Property name="LOG_FORMAT">[%date{yyyy-MM-dd HH:mm:ss}][%level][%file:%line] %msg%n</Property><!--로그 출력 형태-->
</Properties>
<Appenders>
<!--콘솔 로그-->
<Console name="Console" target="SYSTEM_OUT" follow="true">
<PatternLayout pattern="${LOG_FORMAT}"/>
</Console>
<!--로그 파일-->
<RollingFile name="File" fileName="${BASE_DIR}/logs.log" filePattern="${BASE_DIR}/%d{yyyy-MM-dd}.logs.zip">
<PatternLayout pattern="${LOG_FORMAT}"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/> <!-- 매일(yyyy-MM-dd) log zip파일 생성 -->
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="${BASE_DIR}">
<IfAccumulatedFileCount exceeds="4"/> <!-- log 파일이 4개 이상일때 예전 log 파일 삭제-->
<!-- <IfFileName glob="*.log"/> --> <!-- 삭제할 파일명 -->
<!-- <IfLastModified age="3d"/> --> <!-- 마지막 로그가 찍히고 3일 이상된 log 파일 삭제 -->
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Root>
<Logger name="com.example.logdemo" level="WARN" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Logger>
</Loggers>
</Configuration>
4. Test
@RestController
@RequestMapping(value = "log")
public class LogController {
private final Logger logger = LogManager.getLogger(this.getClass());
@GetMapping(name = "로그 확인", value = "check")
public void logCheck() {
logger.debug("Hello Debug level log");
logger.info("Hello Info level log");
logger.warn("Hello Warn level log");
logger.error("Hello Error level log");
}
}
[2021-10-07 16:56:01][WARN][UserController.java:11] Hello Warn level log
[2021-10-07 16:56:01][ERROR][UserController.java:12] Hello Error level log
log4j2.xml에 설정한 로그 파일 경로에 파일이 생성되고 로그가 저장된 것을 확인할 수 있다.
참고
반응형
'Spring' 카테고리의 다른 글
Spring Security + OAuth2.0 소셜 인증 예제(Google, Naver, Kakao) (6) | 2021.10.21 |
---|---|
Spring Cloud Config 소개 & 예제 (0) | 2021.10.18 |
Spring Boot + Flyway를 이용한 데이터베이스 마이그레이션 (0) | 2021.09.16 |
Querydsl 설명 및 예제 (0) | 2021.09.15 |
Spring AOP란? (0) | 2021.09.11 |