무너지지않는 젠가 2024. 6. 19. 13:27

현업에서 로그관리는 매우 중요하다. 필자는 생성되는 로그파일을 따로 정해진 디렉토리에 떨어뜨려서 관리를 했었다.

내가 처음부터 구현해본적이 없어서 잘 모르다가 마침 이클립스로, 개인프로젝트 (스프링 MVC패턴 : 로그인 ~ 게시판 구현)을 하고 있는데 DB쿼리가 콘솔에 안찍혀서 검색을 해보았다. 

 

DB 쿼리를 콘솔에 찍히게 하는것만 설명하겠다. 나머지는 이를 응용해서 하면 된다. 추가하게되면 이 게시글에 추가하겠다.

 

 

1. 프로젝트 pom.xml에 의존성을 추가한다.

 

<dependency>

<groupId>org.bgee.log4jdbc-log4j2</groupId>

<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>

<version>1.16</version>

</dependency>

 

 

2. root-context.xml (또는 dataSource-context.xml)  설정을 아래와 같이 변경한다. 참고로 필자는 mysql을 사용함

 

<기존>

<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">

<property name="driverClassName" value="org.mariadb.jdbc.Driver" />

<property name="url" value="jdbc:mysql://localhost:3306/데이터베이스이름?useUnicode=true&amp;characterEncoding=utf8" />

<property name="username" value="root" />

<property name="password" value="비밀번호" />

 

</bean>

 

<변경>

 

<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">

<!-- <property name="driverClassName" value="org.mariadb.jdbc.Driver" /> -->

<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"/>

<property name="url" value="jdbc:log4jdbc:mariadb://localhost:3306/데이터베이스이름?useUnicode=true&amp;characterEncoding=utf8" />

<property name="username" value="root" />

<property name="password" value="비밀번호" />

 

</bean>

 

 

3. src > main > resource 아래 경로에 log4jdbc.log4j2.properties 파일과 log4j.xml파일  추가

 

<log4jdbc.log4j2.properties 내용>

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator

log4jdbc.drivers=org.mariadb.jdbc.Driver

 

<log4j.xml 내용>

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

 

<!-- Appenders -->

<appender name="console" class="org.apache.log4j.ConsoleAppender">

<param name="Target" value="System.out" />

<layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern" value="%-5p: %c - %m%n" />

</layout>

</appender>

 

<!-- Application Loggers -->

<logger name="com.myproject.controller">

<level value="info" />

</logger>

 

<!-- 3rdparty Loggers -->

<logger name="org.springframework.core">

<level value="info" />

</logger>

 

<logger name="org.springframework.beans">

<level value="info" />

</logger>

 

<logger name="org.springframework.context">

<level value="info" />

</logger>

 

<logger name="org.springframework.web">

<level value="info" />

</logger>

 

<!-- SQL 로그 출력을 위한 설정 추가 시작 -->

<logger name="jdbc.sqlonly" additivity="false">

<level value="debug"/>

<appender-ref ref="console"/>

</logger>

<logger name="jdbc.sqltiming" additivity="false">

<level value="debug" />

<appender-ref ref="console"/>

</logger>

<logger name="jdbc.audit" additivity="false">

<level value="debug"/>

<appender-ref ref="console"/>

</logger>

 

<logger name="jdbc.resultset" additivity="false">

<level value="debug" />

<appender-ref ref="console"/>

</logger>

 

<logger name="jdbc.resultsettable" additivity="false">

<level value="debug"/>

<appender-ref ref="console"/>

</logger>

<!-- SQL 로그 출력을 위한 설정 추가 끝 -->

 

<!-- Root Logger -->

<root>

<priority value="warn" />

<appender-ref ref="console" />

</root>

 

</log4j:configuration>

 

 

4. 결과