반응형
logback-spring.xml 파일 만들기
application.properties
###LOGGER
#이 설정은 Hibernate가 생성하는 SQL 쿼리를 포맷팅하여 출
spring.jpa.properties.hibernate.format_sql=true
#이 설정은 Hibernate가 실행하는 SQL 쿼리를 DEBUG 레벨로 로깅
logging.level.org.hibernate.SQL=DEBUG
#설정을 통해 쿼리에 전달되는 실제 파라미터 값을 로그로 확인
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
logback-spring.xml
<configuration>
<!-- 로깅 파일이 저장될 위치를 지정하는 속성 -->
<property name="LOGS" value="D:/logs" />
<!-- 콘솔에 로그를 출력하는 appender 설정 -->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%yellow(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %magenta(%C{1}): %msg%n%throwable</pattern>
</layout>
</appender>
<!-- 특정 패키지에 대한 로그 레벨과 appender 설정 (중복 방지) -->
<logger name="com.spring.jpa" level="trace" additivity="false">
<appender-ref ref="Console" />
</logger>
<!-- Hibernate SQL 로그 설정 (중복 방지) -->
<logger name="org.hibernate.SQL" level="DEBUG" additivity="false">
<appender-ref ref="Console" />
</logger>
<!-- Hibernate SQL 바인딩 파라미터 로그 설정 (중복 방지) -->
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" additivity="false">
<appender-ref ref="Console" />
</logger>
<!-- 기본 로그 레벨과 appender 설정 -->
<root level="INFO">
<appender-ref ref="Console" />
</root>
</configuration>
LoggerAop만들기
package com.Kkrap;
import org.aspectj.lang.ProceedingJoinPoint; // AOP에서 사용하는 ProceedingJoinPoint 클래스 임포트
import org.aspectj.lang.annotation.Around; // AOP의 Around 어노테이션 임포트
import org.aspectj.lang.annotation.Aspect; // AOP의 Aspect 어노테이션 임포트
import org.slf4j.Logger; // SLF4J의 Logger 인터페이스 임포트
import org.slf4j.LoggerFactory; // SLF4J의 LoggerFactory 클래스 임포트
import org.springframework.stereotype.Component; // Spring의 Component 어노테이션 임포트
import java.util.Arrays; // Arrays 유틸리티 클래스 임포트
@Component // Spring의 빈으로 등록
@Aspect // AOP의 어드바이스로 작동함을 명시
public class LoggerAop {
// SLF4J Logger 객체 생성
private static final Logger log = LoggerFactory.getLogger(LoggerAop.class);
// @Around 어노테이션을 사용하여 특정 메서드 실행 전후에 로깅 수행
@Around("execution(* com.spring.jpa.controller..*Controller.*(..))"
+" || execution(* com.spring.jpa.service..*Service*.*(..))"
+" || execution(* com.spring.jpa.repository..*Repository.*(..))")
public Object logPrint(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
// 현재 실행 중인 메서드가 속한 클래스의 이름을 가져옴
String type = proceedingJoinPoint.getSignature().getDeclaringTypeName();
// 현재 실행 중인 메서드의 이름을 가져와서 로그 출력
log.info("[[START]] " + type + "." + proceedingJoinPoint.getSignature().getName() + "() <=================");
// 메서드에 전달된 파라미터들을 로그로 출력
log.info("Argument/Parameter : " + Arrays.toString(proceedingJoinPoint.getArgs()));
// 메서드 실행 후 종료 로그 출력
log.info("================ [[END : " + proceedingJoinPoint.getSignature().getName() + "()]] ==================");
// 실제 메서드 실행
return proceedingJoinPoint.proceed();
}
}
반응형
'Spring Boot > [Spring boot] IntelliJ Github 연결 및 개발준비' 카테고리의 다른 글
[Spring boot] 폴더 구조 (1) | 2025.01.05 |
---|---|
[Spring boot] Github 연결하기 (0) | 2025.01.05 |