Spring Boot/[Spring boot] IntelliJ Github 연결 및 개발준비

[Spring boot] Logger 설정

재윤 2025. 1. 5. 06:10
반응형

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();
    }

}

 

반응형