VS Code에서 Spring Boot 프로젝트 생성 가이드 (3) - Log4jdbc-log4j2 추가 및 설정 방법

luvulmi·2025년 6월 18일
post-thumbnail

🔍 Step 3. Log4jdbc-log4j2 추가 및 설정 방법

Spring Boot로 프로젝트를 하다 보면, SQL 로그가 안 보여서 디버깅이 힘들다는 경우가 종종 있습니다.
이럴 땐 Log4jdbc-log4j2를 쓰면 해결됩니다. 쿼리, 파라미터, 실행시간까지 볼 수 있습니다.

1. 의존성 추가

  • gradle 일 경우
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-jdbc'
    implementation 'org.springframework.boot:spring-boot-starter-log4j2'
    implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16'
    runtimeOnly 'org.mariadb.jdbc:mariadb-java-client' // DB 드라이버
}

  • Maven 일 경우
    Maven repository 사이트에서 log4jdbc-log4j2를 검색 > Maven 코드를 얻을 수 있습니다. 아래의 코드를 pom.xml 추가해줍니다.
<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4 -->
<dependency>
    <groupId>org.bgee.log4jdbc-log4j2</groupId>
    <artifactId>log4jdbc-log4j2-jdbc4</artifactId>
    <version>1.16</version>
</dependency>

2. application.yml 설정

spring:
  datasource:
    driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
    url: jdbc:log4jdbc:mariadb://localhost:3306/demo_db
    username: demo_user
    password: demo_password

logging:
  level:
    root: info
    jdbc:
      sqlonly: debug
      sqltiming: trace
      resultsettable: off
      audit: off

📌 url 앞에 jdbc:log4jdbc:를 붙여야 로그가 출력됩니다.


3. Log4j2 설정 파일 추가

  • src/main/resources에 log4j2.xml 파일을 생성하세요:
<?xml version="1.0" encoding="UTF-8"?>

<configuration>
    <timestamp key="BY_DATE" datePattern="yyyy-MM-dd"/>
    <property name="LOG_PATH" value ="/usr/local/tomcat10-safety-daelim-8280/logs" />
    <property name="LOG_PATTERN"
        value="[%d{yyyy-MM-dd HH:mm:ss}:%-4relative] %green([%thread]) %highlight([%-5level]) [%logger] %boldWhite([%M:%yellow(%L)]) - %msg%n"/>


    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- SQL Logger -->
    <logger name="jdbc.connection" additivity="false">
        <level value="warn" />
        <appender-ref ref="CONSOLE"/> 
    </logger>
    
    <logger name="jdbc.audit" additivity="false"> 
        <level value="warn"/>  
        <appender-ref ref="CONSOLE"/> 
    </logger> 
    
    <logger name="jdbc.resultset" additivity="false">
        <level value="warn" />
        <appender-ref ref="CONSOLE"/> 
    </logger>
    
    <!-- info 하위만 표시-->
    <logger name="jdbc.sqlonly" additivity="false"> 
        <level value="info"/> 
        <appender-ref ref="CONSOLE"/> 
    </logger>
    
    <!-- info 하위만 표시-->
    <logger name="jdbc.resultsettable" additivity="false"> 
        <level value="info"/>  
        <appender-ref ref="CONSOLE"/> 
    </logger> 
    
    <logger name="jdbc.sqltiming" additivity="false">
        <level value="warn" />
        <appender-ref ref="CONSOLE"/> 
    </logger>

    <!-- [Fatal > Error > Warn > Info > Debug > Trace] 로그 레벨 -->
    <!-- .java에서 Logger.info()인경우 상위만 표시-->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
    </root>

</configuration>

  • (참고) Log4j2 상세 설정 파일 추가
    src/main/resources에 log4jdbc.log4j2.properties 파일을 생성하세요:
    log4j2.xml는 로그 출력 형식 및 대상 제어하는 파일이라면
    log4jdbc.log4j2.properties는 Log4jdbc 자체 로그 동작을 제어하는 파일입니다.
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.log4j2.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0
log4jdbc.dump.sql.select=false
log4jdbc.dump.sql.insert=true
log4jdbc.dump.sql.update=true
log4jdbc.dump.sql.delete=true
log4jdbc.trim.sql=true
log4jdbc.suppress.generated.keys=false

📌 사용하는 경우?

  • SELECT 쿼리만 로그에 너무 많이 찍혀서 로그 더미가 될 때 → log4jdbc.dump.sql.select=false

  • INSERT/UPDATE/DELETE만 보고 싶을 때

  • SQL 라인이 너무 길어서 보기 힘들 때 → maxlinelength 조절

  • 로그 포맷을 커스터마이징하고 싶을 때

4. 실행 후 로그 확인

애플리케이션을 실행하면 아래와 같은 로그가 출력됩니다:

[12:34:56.789] DEBUG jdbc.sqlonly - SELECT * FROM users WHERE id = ?
[12:34:56.790] TRACE jdbc.sqltiming - SELECT * FROM users WHERE id = ? :: 3 ms

5. 추가 팁: 환경별 설정 분리

운영환경에서는 로그 레벨을 낮추고 싶다면?

# application.yml
spring:
  profiles:
    active: local
# application-local.yml
logging:
  level:
    jdbc:
      sqltiming: trace
# application-prod.yml
logging:
  level:
    jdbc:
      sqltiming: off

📌 운영 DB에서 무분별하게 쿼리 로그 찍히는 걸 방지할 수 있습니다.

profile
멋쟁이 개발자

0개의 댓글