지구용사 2024. 8. 21. 11:13

💻 MySql, MyBatis, Gradle

 

log4jdbc는 자바 애플리케이션에서 JDBC 드라이버를 사용할 때 SQL문의 실행 로그를 자동으로 기록해주는 라이브러리이다.

 

1. 의존성 주입

implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4:1.16'

 

2. resources 디렉터리에 log4jdbc.log4j2.properties 추가

해당 파일은 JDBC 드라이버의 동작을 사용자가 정의하는 구성 파일이다. 이 파일을 사용하여 드라이버의 로깅 출력, 로그 레벨, 어펜더 및 포맷팅과 같은 것을 제어할 수 있다.

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0
log4jdbc.drivers=com.mysql.cj.jdbc.Driver
log4jdbc.auto.load.popular.drivers=false
#log4jdbc
logging.level.jdbc.sqlonly=info
logging.level.jdbc.sqltiming=off
logging.level.jdbc.resultsettable=off
logging.level.jdbc.audit=off
logging.level.jdbc.resultset=off
logging.level.jdbc.connection=off

# jdbc.sqlonly - SQL문을 보여줌
# jdbc.sqltiming - SQL문과 SQL문 수행하는 시간을 같이 보여줌
# jdbc.resultsettable - SQL 의 결과로 조회된 데이터를 table 형태로 로그를 보여줌
# jdbc.audit - ResultSet 을 제외한 모든 JDBC 호출 정보를 로그로 보여줌, 상당히 많은 양의 로그가 나오기 때문에 권장하지 않음.
# jdbc.resultset - ResultSet 을 포함한 모든 JDBC 호출 정보를 로그로 보여줌, audit 처럼 많은 로그가 나오기 때문에 권장하지 않음.
# jdbc.connection - DB 연결, 연결 해제와 관련된 로그를 보여줌

# off - 사용하지 않음
# info - 정보성 로그
# warn - 경고성 로그
# error - 에러 로그
# fatal - 심각한 문제 로그

 

3. 데이터베이스와 연결 설정을 하기 위해 application.properties 수정

spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.url=jdbc:log4jdbc:mysql://localhost:8080
spring.datasource.username=[DB아이디]
spring.datasource.password=[DB비밀번호]

 

4. resources 디렉터리에 loback-spring.xml 추가

해당 파일은 로그 환경설정을 정의하는 파일이다.

<?xml version="1.0" encoding="UTF-8"?>
<!-- 디버그 모드를 활성화 -->
<configuration debug="true">
    <!-- 로그 메시지 인코딩하고 포맷팅 -->
    <!-- 로그가 기록된 날짜와 시간 + 로그레벨 +  [로그 생성된 클래스 또는 이름] + 실제 로그 메시지 내용 + 줄바꿈 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <charset>UTF-8</charset>
            <Pattern>%d %5p [%c] %m%n</Pattern>
        </encoder>
    </appender>

    <!-- 로그가 기록된 날짜와 시간 + 로그레벨 + 실제 로그 메시지 내용 -->
    <appender name="console-infolog" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <charset>UTF-8</charset>
            <Pattern>%d %5p %m%n</Pattern>
        </encoder>
    </appender>

    <!-- 클래스에서 생성되는 로그의 레벨과 출력을 정의 -->
    <logger name="com.waggle" level="DEBUG" appender-ref="console" />
    <logger name="jdbc.sqlonly" level="INFO" appender-ref="console-infolog" />
    <logger name="jdbc.resultsettable" level="INFO" appender-ref="console-infolog" />

    <!-- 모든 로그의 기본 레벨을 설정하는 것으로 로그가 출력되지 않음 -->
    <root level="off">
        <appender-ref ref="console" />
    </root>
</configuration>

 


 

🔗 참고 링크

https://congsong.tistory.com/23

https://adjh54.tistory.com/228