개인적인 정리

전자정부표준프레임워크에서 SQL 로그 찍기 본문

전자정부표준프레임워크

전자정부표준프레임워크에서 SQL 로그 찍기

yeon.Biju 2021. 9. 8. 16:54

전자정부표준프레임워크에서 SQL 로그를 찍어보고자 한다.

SQL 로그를 찍는데 쿼리에 ? 가 찍히지 않고 값이 바인딩 된 형태로 찍고자 한다.

?로 표시된 것은 ?가 한두개 일 때는 괜찮은데, 한 10개쯤 되면 짜증이 나기 때문에 값이 잘 바인딩 된 형태로 출력을 해야 쿼리를 확인하는데 도움이 되기 때문이다.

 

이렇게 SQL 로그를 찍는 방법에는 몇가지가 있는 것 같다.

그 중 한가지는 나는 잘 안되어서 포기하고 아래와 같은 방법으로 작업을 해봤다.

일단 이 방법은 좀 쉬워보인다.

 

전자정부표준프레임워크를 기준으로 기술해본다. 다른 환경이라도 동일하게 하면 잘 될거라 생각하지만 안되는 경우도 있을 수 있을 것 같다.

 

 

1. 라이브러리 추가

   - pom.xml 에 다음 내용을 적당한 위치에 추가한다.

1
2
3
4
5
6
7
8
<!-- 쿼리 로그 -->
<dependency>
        <groupId>org.bgee.log4jdbc-log4j2</groupId>
        <artifactId>log4jdbc-log4j2-jdbc4</artifactId>
        <version>1.16</version>
    </dependency>
 
<!-- //쿼리 로그 -->
cs

   - build 와 validation 과정이 진행되면서 시간이 좀 오래 걸릴 수 있다.

 

2. DB 연결관련 설정 변경

   - 전자정부표준프레임워크는 globals.properties 에서 수정할 수 있다. 또는 context-datasource.xml에서 수정할 수 있다.

 

   - DB 연결 드라이버 클래스명

 기존에 설정된 것을 아래와 같이 변경한다.

 

Globals.DriverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy

 

   - DB 연결 URL

기존에 jdbc:mysql://ip:3306.... 와 같이 설정된 것을 

jdbc:log4jdbc:mysql://ip:3306.... 와 같이 변경한다.

잘 보면 중간에 log4jdbc: 가 껴들어간 것이다. 

오라클도 동일하다. 중간에 log4jdbc: 를 껴넣으면 된다.

jdbc:oracle:thin:@ip:1521:orcl 

위의 내용이 아래와 같이 변경된다.

jdbc:log4jdbc:oracle:thin:@ip:1521:orcl

 

3. log4jdbc.log4j2.properties 파일 추가

   - 아마도 src>main>resources 에 보면 log4j2.xml 파일이 있을 것이다. 해당 위치에 log4jdbc.log4j2.properties 파일을 생성하고 다음의 내용을 입력한다. 2줄이다.

 

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0

 

4. log4j2.xml 파일 수정

   - 로그을 어떻게 보여줄 것인가 하는 설정파일인데, 일단 아래와 같이 변경을 한 후에 원하는데로 커스텀을 하는 것이 좋겠다. 몇번 해보니 사소한 무언가로 인해서 적용이 잘 안되는 경우가 있었다. 따라서 아래와 같이 설정한 후에 로그가 잘 나오는 것을 확인하고 원하는데로 설정파일을 수정하는 것이 좋을 것 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d %5p [%c] %m%n" />
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="egovframework" level="DEBUG" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        <Logger name="org.egovframe" level="DEBUG" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        
        <Logger name="org.springframework" level="INFO" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        
        <!--  SQL 쿼리 문장 -->
     
        <Logger name="java.sql" level="ERROR" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        
        <Logger name="jdbc.sqlonly" level="ERROR" additivity="false"> 
            <AppenderRef ref="console" /> 
        </Logger>
        
        <!-- log SQL with timing information, post execution -->
        <Logger name="jdbc.sqltiming" level="INFO" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        
         <Logger name="jdbc.audit" level="WARN" additivity="false">
             <appender-ref ref="console"/>
         </Logger>
        
         <Logger name="jdbc.resultset" level="WARN" additivity="false">
             <appender-ref ref="console"/>
         </Logger>
         
 
        <Logger name="jdbc.resultSettable" level="INFO" additivity="false">
            <appender-ref ref="console"/>
        </Logger>
        
 
        <Root level="INFO">
            <AppenderRef ref="console" />
        </Root>
    </Loggers>
</Configuration>
cs

  - 쿼리 결과를 보여주는 resultSettable가 잘 작동하지 않아서 뭐가 잘못된걸까 한참 찾아봤는데,  Root 의 level을 INFO 로 하니까 잘 된다. 그 전에는 ERROR였었다. 

   - 파일로도 첨부해놓는다.

log4j2.xml
0.00MB

5. 톰캣을 시작해봐서 쿼리가 나오는 화면을 열어본다.

   - 톰캣만 시작해도 달라진 것이 보일 수 있다.

   - 쿼리에 ? 자리에 값이 들어가 있는지 확인해본다. 잘 들어가있으면 성공.

 

 

'전자정부표준프레임워크' 카테고리의 다른 글

JSTL 날짜에 요일 출력하기  (0) 2021.11.30
JSTL 날짜 계산  (0) 2021.11.30
JSTL 오늘 날짜  (0) 2021.11.27
log4j의 level  (0) 2021.09.08
MySQL jdbc 드라이버 변경  (0) 2021.09.06
java 에서 switch  (0) 2021.08.26
전자정부표준프레임워크 v3.10  (0) 2021.03.11
데이타를 json으로 출력하기 - 1  (0) 2021.02.17
Comments