SQL 로그 설정 (log4jdbc)

hiyayeah·2023년 1월 9일
0

MVC_Model1 -> Spring_MVC

목록 보기
7/12

파이널 프로젝트를 진행할 때, 오류 확인 시 너무 유용했던 log4j 라이브러리

1. pom.xml

: Log4Jdbc Log4j2 JDBC 4(org.bgee.log4jdbc-log4j2) 라이브러리 추가

<!-- SQL 로그에 사용할 log4jdbc-log4j2 라이브러리 -->
<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4.1 -->
<dependency>
	<groupId>org.bgee.log4jdbc-log4j2</groupId>
	<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
	<version>1.16</version>
</dependency>

2. root-context.xml

: JDBC(DBCP) 설정이 있는 root-context.xml 파일 수정

<!-- SQL 로그를 위한 log4jdbc 라이브러리 관련 JDBC 설정(driverClassName, jdbcUrl 수정) -->

<!-- 원래 코드 -->
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
	<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
	<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ooo"></property>
	<property name="username" value="root"></property>
	<property name="password" value="1234"></property>
</bean>

⬇️⬇️⬇️

<!-- 수정된 코드 -->
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
	<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
	<property name="jdbcUrl" value="jdbc:log4jdbc:mysql://localhost:3306/ooo"></property>
	<property name="username" value="root"></property>
	<property name="password" value="1234"></property>
</bean>

3. log4jdbc.log4j2.properties

: src/main/resources - log4jdbc.log4j2.properties 파일 생성 및 프로퍼티 설정

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

4. log4j.xml

4-1. 주소 수정

: 2번 라인 DOCTYPE 의 log4j.dtd 앞에 주소 추가

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


⬇️⬇️⬇️

<!-- 수정된 코드 -->
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">

4-2. 내용 추가

<!-- SQL Logger 추가 -->
<!-- jdbc.sqlonly : SQL 쿼리 문장에 대한 로그(전달인자 포함한 문장) -->
<logger name="jdbc.sqlonly" additivity="false">
	<level value="info" />
	<appender-ref ref="console" />
</logger>

<!-- jdbc.sqltiming : SQL 문장과 실행시키는데 소요된 시간(밀리초)에 대한 로그 -->
<logger name="jdbc.sqltiming" additivity="false">
	<level value="warn" />
	<appender-ref ref="console" />
</logger>

<!-- jdbc.audit : JDBC 호출 정보에 대한 로그(ResultSet 제외) => 내용 많음 -->
<logger name="jdbc.audit" additivity="false">
	<level value="warn" />
	<appender-ref ref="console" />
</logger>

<!-- jdbc.result : ResultSet 을 포함한 JDBC 호출 정보에 대한 로그 => 내용 많음 -->
<logger name="jdbc.result" additivity="false">
	<level value="warn" />
	<appender-ref ref="console" />
</logger>

<!-- jdbc.result : SELECT 실행 결과(데이터 테이블) 에 대한 로그 -->
<logger name="jdbc.resultsettable" additivity="false">
	<level value="info" />
	<appender-ref ref="console" />
</logger>

5. 세팅 확인

프로젝트에서 회원가입을 수행했을 때 로그 (4번째 회원)
member 테이블과 address 테이블에 잘 INSERT 되는 걸 볼 수 있다.

INFO : jdbc.sqlonly - SELECT IFNULL(MAX(member_idx),0) FROM member 

INFO : jdbc.resultsettable - 
|--------------------------|
|ifnull(max(member_idx),0) |
|--------------------------|
|3                         |
|--------------------------|

INFO : jdbc.sqlonly - INSERT INTO member VALUES ( 3 + 1, 'winter', '12341234!', '김민정', 'f', 'winter@ooo.com', '010-0101-0101', 
DATE_FORMAT(now(), '%y-%m-%d'), 'N' ) 

INFO : jdbc.sqlonly - SELECT IFNULL(MAX(address_idx),0) FROM address 

INFO : jdbc.resultsettable - 
|---------------------------|
|ifnull(max(address_idx),0) |
|---------------------------|
|3                          |
|---------------------------|

INFO : jdbc.sqlonly - INSERT INTO address VALUES ( 3 + 1, 3 + 1, '01010', '경기도 화성시 ----------', '---동 ---호' )

0개의 댓글