Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
마이바티스(MyBatis)쿼리로그 출력및 정렬하기
1. gradle파일 수정
build.gradle파일에 아래 내용을 추가후 eclipse 프로젝트에서 오른쪽 마우스 클릭 Gradle->"Refresh Dependencies"에서 한다.
compile group: 'org.lazyluke', name: 'log4jdbc-remix', version:'0.2.7'
2. log4j파일 수정
<?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="stdout" class="org.apache.log4j.ConsoleAppender">
<!-- 패턴 레이아웃 설정.. -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] [%c{1}] [%L] [%p] %m %n" />
</layout>
</appender>
<!-- 날짜별 로그 -->
<appender name="dailyout" class="org.apache.log4j.DailyRollingFileAppender">
<!-- 이것은 날짜별로 로그를 남김. 파일명.확장자.DatePattern으로 정의 함 -->
<param name="file" value="/home/hadoop/daily-log.log" />
<param name="Append" value="true" />
<param name="DatePattern" value="'.'yyMMdd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] [%c{1}] [%L] [%p] %m %n" />
</layout>
</appender>
<logger name="com.gooper.hadoop" additivity="false">
<level value="DEBUG" />
<appender-ref ref="dailyout" />
<appender-ref ref="stdout" />
</logger>
<logger name="org.springframework" additivity="false">
<level value="INFO" />
<appender-ref ref="dailyout" />
<appender-ref ref="stdout" />
</logger>
<logger name="jdbc.sqlonly" additivity="false">
<level value="DEBUG" />
<appender-ref ref="dailyout" />
<appender-ref ref="stdout" />
</logger>
<logger name="jdbc.resultsettable" additivity="false">
<level value="DEBUG" />
<appender-ref ref="dailyout" />
<appender-ref ref="stdout" />
</logger>
<!-- root 로거 기본 설정 -->
<root>
<level value="WARN" />
<appender-ref ref="dailyout" />
<appender-ref ref="stdout" />
</root>
</log4j:configuration>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- Appenders -->
<!-- 콘솔 로그 -->
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<!-- 패턴 레이아웃 설정.. -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] [%c{1}] [%L] [%p] %m %n" />
</layout>
</appender>
<!-- 날짜별 로그 -->
<appender name="dailyout" class="org.apache.log4j.DailyRollingFileAppender">
<!-- 이것은 날짜별로 로그를 남김. 파일명.확장자.DatePattern으로 정의 함 -->
<param name="file" value="/home/hadoop/daily-log.log" />
<param name="Append" value="true" />
<param name="DatePattern" value="'.'yyMMdd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] [%c{1}] [%L] [%p] %m %n" />
</layout>
</appender>
<logger name="com.gooper.hadoop" additivity="false">
<level value="DEBUG" />
<appender-ref ref="dailyout" />
<appender-ref ref="stdout" />
</logger>
<logger name="org.springframework" additivity="false">
<level value="INFO" />
<appender-ref ref="dailyout" />
<appender-ref ref="stdout" />
</logger>
<logger name="jdbc.sqlonly" additivity="false">
<level value="DEBUG" />
<appender-ref ref="dailyout" />
<appender-ref ref="stdout" />
</logger>
<logger name="jdbc.resultsettable" additivity="false">
<level value="DEBUG" />
<appender-ref ref="dailyout" />
<appender-ref ref="stdout" />
</logger>
<!-- root 로거 기본 설정 -->
<root>
<level value="WARN" />
<appender-ref ref="dailyout" />
<appender-ref ref="stdout" />
</root>
</log4j:configuration>
3. jdbc 설정정보 변경
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" -->
<bean id="dataSourceSpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" >
<property name="driverClassName" value="org.mariadb.jdbc.Driver"/>
<property name="url" value="jdbc:mariadb://localhost:3306/db명"/>
<property name="username" value="username"/>
<property name="password" value="username_password"/>
<property name="initialSize" value="10" />
</bean>
<bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
<constructor-arg ref="dataSourceSpied" />
<property name="logFormatter">
<bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
<property name="loggingType" value="MULTI_LINE" />
<property name="sqlPrefix" value="SQL : "/>
</bean>
</property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" -->
<bean id="dataSourceSpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" >
<property name="driverClassName" value="org.mariadb.jdbc.Driver"/>
<property name="url" value="jdbc:mariadb://localhost:3306/db명"/>
<property name="username" value="username"/>
<property name="password" value="username_password"/>
<property name="initialSize" value="10" />
</bean>
<bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
<constructor-arg ref="dataSourceSpied" />
<property name="logFormatter">
<bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
<property name="loggingType" value="MULTI_LINE" />
<property name="sqlPrefix" value="SQL : "/>
</bean>
</property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
4. 설명
- 기존에 DB연결을 dataSource를 이용했으나 log4j-remix를 쿼리의 중간을 가로채 정렬하고 쿼리를 출력하는 역할을 합니다.
- 기존에 사용한 DB연결은 dataSourceSpied로 변경하고, 새로 dataSource를 만들고 로그타입과 쿼리를 어떻게 출력하지 설정함
- log4j에서 jdbc.sqlonly로거를 이용하여 쿼리를 출력하도록 하고 dataSourceSpied(log4j-remix)가 쿼리를 정렬함
- log4j설정에 추가한 jdbc.resultsettable가 쿼리결과를 출력하도록 합니다.(이부분을 생략하면 쿼리결과 출력은 없어짐)
댓글 0
| 번호 | 제목 | 날짜 | 조회 수 |
|---|---|---|---|
| 613 | 부팅을 외장하드에서 하도록 변경하는 방법 | 2015.07.28 | 3565 |
| 612 | pom.xml에서 build.gradle로 변환 | 2015.09.14 | 3355 |
| 611 | mongodb 2.6.6 설치(64bit) | 2015.09.30 | 2723 |
| 610 | SQL문장과 Mongo에서 사용하는 명령어를 비교한 것입니다. | 2015.09.30 | 4223 |
| 609 | root계정으로 MariaDB설치후 mysql -u root -p로 db에 접근하여 바로 해줘야 하는일..(케릭터셑은 utf8) | 2015.10.02 | 3899 |
| 608 | DB별 JDBC 드라이버 | 2015.10.02 | 4345 |
| 607 | Mybatis foreach 문법정리(상황에 따른 사용법) | 2015.11.10 | 5828 |
| 606 | mybais #과 $의 차이점 | 2015.11.10 | 3835 |
| 605 | Resource temporarily unavailable(자원이 일시적으로 사용 불가능함) 오류조치 | 2015.11.19 | 12093 |
| 604 | Runtime.getRuntime().exec(cmd) sample 소스 | 2015.11.19 | 2753 |
| 603 | sparql에서 concat에제 | 2015.11.27 | 3131 |
| » | 마이바티스(MyBatis)쿼리로그 출력및 정렬하기 | 2015.12.01 | 4462 |
| 601 | ontology, jena, sparql등 전반에 대한 설명및 예제를 제공하는 사이트 | 2015.12.08 | 2722 |
| 600 | protege 4.3 다운로드 | 2015.12.09 | 2630 |
| 599 | git설명 한글판 | 2015.12.09 | 2901 |
| 598 |
sparql 문법구조 설명
| 2015.12.09 | 3558 |
| 597 | 대표 오픈소스 라이선스, 한 눈에 보기! | 2015.12.10 | 3169 |
| 596 | 천문학적, 기후학적, 기상학적, 생물학적, 농사계절 구분 | 2015.12.16 | 4153 |
| 595 | java quartz 시간 설정 참고사항 | 2015.12.16 | 3871 |
| 594 | console명령과 API비교 | 2015.12.21 | 4832 |