본문 바로가기
Developer/Apache Log4j

[아키텍처] Log4j 파라미터 포함된 SQL보기, context-datasource 파헤치기

by 순수한소년 2024. 1. 24.
728x90
반응형

Spring context-datasource 파헤치기

필요첨부파일

/프로젝트명/src/main/resources/egovframework/spring/context-datasource.xml

 

1. bean id dataSource의 유형 2개

A타입    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

B타입    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

 

2. property name driverClassName의 유형 3

A타입  <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>

C타입  <property name="driverClassName" value="core.log.jdbc.driver.OracleDriver"/>

B타입 <property name="driverClassName" value="net.sf.log4jdbc.DriverSpy"/>

 

3. property name url의 유형 2개

A타입  <property name="url" value="jdbc:oracle:thin:@10.10.10.111:1521:ABCD" />

B타입 <property name="url" value="jdbc:log4jdbc:oracle:thin:@10.10.10.111:1521:ABCD" />

 

SAMPLE 만들기 A타입

1
2
3
4
5
6
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="net.sf.log4jdbc.DriverSpy"/>
        <property name="url" value="jdbc:log4jdbc:oracle:thin:@10.10.10.123:1521:orcl" />
        <property name="username" value="TEST" />
        <property name="password" value="TEST" />
    </bean>
cs

 

SAMPLE 만들기 B타입
1
2
3
4
5
6
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
       <property name="driverClassName" value="core.log.jdbc.driver.OracleDriver"/>
       <property name="url" value="jdbc:oracle:thin:@10.10.10.123:1521:orcl" />
        <property name="username" value="TEST" />
        <property name="password" value="TEST" />
    </bean>
cs

 

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}] [%M] %m%n %-5p %l" />
        </Console>
    </Appenders>
 
    <Loggers>
        <Logger name="com.ibatis" level="DEBUG" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>
        <!--   RESULT가 많을 경우 INFO로 하향조정 필요 -->
        <Logger name="java.sql" level="ERROR" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        <Logger name="java.sql.Connection" level="OFF" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        <Logger name="java.sql.PreparedStatement" level="OFF" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        <Logger name="java.sql.Statement" level="OFF" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        <Logger name="java.sql.ResultSet" level="OFF" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        <!-- SQL만 출력 -->
        <Logger name="java.sqlonly" level="OFF" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
 
        <!-- 베이스 패키지 구조로 잡아줘야 함. -->
        <Logger name="org.springframework" level="DEBUG" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        <Logger name="egovframework" level="DEBUG" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        <Logger name="test" level="DEBUG" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        <Logger name="testsystem.egov" level="DEBUG" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
 
        <!-- 사용하지 않는 로그 -->
        <Logger name="org.apache.commons.digester.Digester" level ="OFF" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>
        <Logger name="org.apache.commons.dbcp.DelegatingPreparedStatement" level ="OFF" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>
        <Logger name="org.springframework.security" level ="OFF" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>
        <Logger name="org.springframework.web.servlet.view.AbstractView" level ="DEBUG" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>
        <Logger name="org.springframework.jdbc.datasource.DataSourceUtils" level ="DEBUG" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>
        <Logger name="org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory" level ="DEBUG" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>
        <Logger name="org.springframework.web.servlet.handler.AbstractHandlerMethodMapping" level ="DEBUG" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>
        <Logger name="org.springframework.beans.factory.annotation.InjectionMetadata.checkConfigMembers" level ="DEBUG" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>
        <Logger name="org.springframework.web.servlet.handler.AbstractDetectingUrlHandlerMapping.detectHandlers" level ="DEBUG" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>
        <Logger name="org.mybatis.spring.transaction.SpringManagedTransaction" level ="OFF" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>
        <Logger name="net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator" level ="OFF" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>
        <Logger name="org.apache.commons.beanutils.ConvertUtilsBean" level ="OFF" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>
        <Logger name="org.apache.commons.beanutils.BeanUtilsBean" level ="OFF" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>
        <Logger name="org.apache.commons.beanutils.converters.AbstractConverter" level ="OFF" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>
        <Logger name="org.mybatis.spring.SqlSessionFactoryBean" level ="OFF" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>
 
        <!-- log SQL with timing information, post execution -->
        <!-- JDBC -->
        <Logger name="jdbc.connection" level="OFF" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
 
        <!-- SQL과 경과 시간을 함께 출력 -->
        <Logger name="jdbc.sqltiming" level="OFF" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
 
        <!-- SQL결과 상세하기 -->
        <Logger name="jdbc.audit" level="OFF" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
 
        <!-- SQL결과 상세하게 -->
        <Logger name="jdbc.resultset" level="OFF" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
 
        <!-- 결과 TABLE 형태로 출력 -->
        <Logger name="jdbc.resultsettable" level="INFO" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
 
        <!-- log4jdbc -->
         <logger name="log4jdbc.log4j2" level="DEBUG" additivity="false">
            <MarkerFilter marker="LOG4JDBC_NON_STATEMENT" onMatch="DENY" onMismatch="NEUTRAL" />
            <appender-ref ref="console" />
        </logger>
        <logger name="log4jdbc.log4j2" level="OFF" additivity="false">
            <MarkerFilter marker="LOG4JDBC_AUDIT" onMatch="ACCEPT" onMismatch="DENY" />
            <appender-ref ref="console" />
        </logger>
        <logger name="log4jdbc.log4j2" level="OFF" additivity="false">
            <MarkerFilter marker="LOG4JDBC_RESULTSET" onMatch="ACCEPT" onMismatch="DENY" />
            <appender-ref ref="console" />
        </logger>
        <logger name="log4jdbc.log4j2" level="OFF" additivity="false">
            <MarkerFilter marker="LOG4JDBC_CONNECTION" onMatch="ACCEPT" onMismatch="DENY" />
            <appender-ref ref="console" />
        </logger>
        <logger name="log4jdbc.log4j2" level="OFF" additivity="false">
            <MarkerFilter marker="LOG4JDBC_RESULTSETTABLE" onMatch="ACCEPT" onMismatch="DENY" />
            <appender-ref ref="console" />
        </logger>
 
        <Root level="DEBUG">
            <AppenderRef ref="console" />
        </Root>
    </Loggers>
</Configuration>
cs
@
 

log4jdbc는 Server > Overview > Open launch configuration > Arguments에 꼭 추가해야함.

 

 티베로

-Dlog4jdbc.drivers="com.tmax.tibero.jdbc.TbDriver"

1
2
3
4
5
6
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
       <property name="driverClassName" value="net.sf.log4jdbc.Driver.Spy"/>
       <property name="url" value="jdbc:log4jdbc:tibero:thin:@10.10.10.123:8629:DB명" />
       <property name="username" value="TEST" />
       <property name="password" value="TEST" />
    </bean>
cs

 

 포스트그레

-Dlog4jdbc.drivers="org.postgresql.Driver"

log4jdbc-log4j2-jdbc4-1.16.jar파일을 사용할 때는

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

1
2
3
4
5
6
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
       <property name="driverClassName" value="net.sf.log4jdbc.Driver.Spy"/>
       <property name="url" value="jdbc:log4jdbc:postgresql://10.10.10.123:5433/db명" />
       <property name="username" value="TEST" />
       <property name="password" value="TEST" />
    </bean>
cs

 

 큐브리드 A타입

-Dlog4jdbc.drivers=cubrid.jdbc.driver.CUBRIDDriver

1
2
3
4
5
6
7
8
9
10
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" />
    <property name="url" value="jdbc:log4jdbc:cubrid:192.168.xx.xxx:30000:snms:::?charset=utf-8" />
    <property name="username" value="${Globals.DB.UserName}" />
    <property name="password" value="${Globals.DB.Password}" />
    <property name="validationQuery" value="select 1 from dual" />
    <property name="testWhileIdle" value="true" />
    <property name="timeBetweenEvictionRunsMillis" value="60000" />   <!-- 1분 -->
</bean>
 
cs

 

 큐브리드 B타입

1
2
3
4
5
6
7
8
9
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" />
    <property name="url" value="jdbc:cubrid:192.168.xx.xxx:30000:snms:::?charset=utf-8" />
    <property name="username" value="${Globals.DB.UserName}" />
    <property name="password" value="${Globals.DB.Password}" />
    <property name="validationQuery" value="select 1 from dual" />
    <property name="testWhileIdle" value="true" />
    <property name="timeBetweenEvictionRunsMillis" value="60000" />   <!-- 1분 -->
</bean>
cs

 

 

Tomcat argument선언

/apps/apache-tomcat-7.0.99/conf

1
2
#20220419추가
log4jdbc.drivers=cubrid.jdbc.driver.CUBRIDDriver
cs

 

※ 다른 드라이버 클래스를 찾을 수 없다고 하는 경우

-Dlog4jdbc.auto.load.popular.drivers=false

라이브러리 사용파악하기

@

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
<!-- bean A타입 : common-dbcp-1.4.jar -->
<!-- <bean id="dataSourceSet" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> -->
 
<!-- bean B타입 : spring-jdbc-4.0.9.RELEASE.jar -->
     <bean id="dataSourceSet" class="org.springframework.jdbc.datasource.DriverManagerDataSource"" destroy-method="close">
 
<!-- property A타입 : log4jdbc-1.2.jar -->
        <property name="driverClassName" value="net.sf.log4jdbc.DriverSpy" />
        <property name="url" value="jdbc:log4jdbc:oracle:thin:@192.168.0.3:1521:orcl" />
 
<!-- property B타입 : ojdbc-14.jar -->
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@192.168.0.3:1521:orcl" />
 
<!--  property C타입 : log4jdbc-log4j2-jdbc4-1.16.jar -->
        <property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" />
        <property name="url"             value="jdbc:log4jdbc:oracle:thin:@192.168.0.3:1521:orcl" />
 
         <property name="username"                     value="test03" />
        <property name="password"                      value="test" />
        <property name="initialSize"                   value="3" />
        <property name="maxActive"                     value="15" />
        <property name="maxIdle"                       value="15" />
        <property name="maxWait"                       value="5000" />
        <property name="poolPreparedStatements"        value="true" />
        <property name="maxOpenPreparedStatements"     value="100" />
        <property name="validationQuery"               value="SELECT 1 FROM DUAL" />
        <property name="timeBetweenEvictionRunsMillis" value="60000" />
     </bean>
 
cs

@

 

반응형