티스토리 뷰
Spring 토이 프로젝트에 log4j2와 slf4j를 적용해봤는데, 그 과정에서 꽤나 헤매서 정리를 좀 하려고 한다.
기본적으로 log4j.xml 에서 spring 구동 정보는 모두 DEBUG로 띄우도록 하고, AspectJ의 Before, After를 사용하여 프로젝트의 모든 메서드 시작 전, 후에 로그를 찍도록 설정했다.
1. dependency 추가
log4j-core와 이를 구현하기 위한 slf4j, 그리고 이 둘을 바인딩하기 위한 slf4j-simple까지 gradle에 추가해준다.
◎build.gradle
implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.17.1'
implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.17.1'
implementation group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.17.1'
2. log4j2.xml
log4j2 config 파일을 resource폴더 바로 밑에 생성하여, Logging 설정을 해준다. 여기서 만약, resource가 아닌 다른 위치에 log4j2.xml 파일을 생성했다면, 해당 위치를 web.xml 에 명시해줘야 한다.
◎log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<!-- Appenders -->
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%-5p: %c - %m%n" />
</Console>
</Appenders>
<!-- Application Loggers -->
<Loggers>
<Logger name="org.springframework" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="com.sgt" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
</Logger>
</Loggers>
</Configuration>
우선, 간단하게 위와 같이 springframework 구동과 프로젝트 핵심 관심을 DEBUG LEVEL로 콘솔창에 띄우도록 했다.
3. LoggerService 작성
AOP 사용을 위한 횡단 관심인 LoggerService Class를 작성했다. SpringFramework에 대한 구동 정보만 기록해도 사실 큰 문제는 없으나, AspectJ를 사용하는데 굳이 안쓸 필요는 없을 거 같아서...
◎LoggerService.class
package com.sgt.logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Aspect
public class LoggerService {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Before("execution(* com.sgt.test.*.*.*(..))")
public void beforeLog(JoinPoint jp) {
logger.info("[" + jp.getTarget().getClass().getSimpleName() + "||" + jp.getSignature().getName() + " START]");
}
@After("execution(* com.sgt.test.*.*.*(..))")
public void afterLog(JoinPoint jp) {
logger.info("[" + jp.getTarget().getClass().getSimpleName() + "||" + jp.getSignature().getName() + " END]");
}
}
여기까지 작성하면, Before과 After 메서드가 test 내부 모든 관심 앞, 뒤로 끼어들어 log를 찍을 것이다.
4. Output
프로젝트를 run해보면, 다음과 같이 SpringFramework 구동 정보가 로그로 찍히고
이어서, 3번에서 설정했던 Before, After메서드가 실행되면서 메서드 정보를 찍는다.
'[JAVA] > Spring' 카테고리의 다른 글
[Error] Intellij 에서 exploded war 파일을 제대로 빌드하지 못함 (0) | 2022.03.29 |
---|---|
[Spring] Gradle기반 Spring Project 생성 (0) | 2022.01.18 |
[Spring] Spring Project 예제: To Do List (0) | 2021.07.01 |
[Spring] JSON & XML 형식으로 데이터 변환 (0) | 2021.06.28 |
[Spring] 다국어 처리 (0) | 2021.06.28 |
- 정보보안기사 #실기 #정리
- react
- javascript
- 맛집
- redux
- AsyncStorage
- redux-thunk
- 파니노구스토
- 이탈리안 레스토랑
- Promise
- Async
- await
- react-native
- 인천 구월동 맛집
- 인천 구월동 이탈리안 맛집
- Total
- Today
- Yesterday