메뉴 건너뛰기

Cloudera, BigData, Semantic IoT, Hadoop, NoSQL

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>

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>


4. 설명

  • 기존에 DB연결을 dataSource를 이용했으나 log4j-remix를 쿼리의 중간을 가로채 정렬하고 쿼리를 출력하는 역할을 합니다.
  • 기존에 사용한 DB연결은 dataSourceSpied로 변경하고, 새로 dataSource를 만들고 로그타입과 쿼리를 어떻게 출력하지 설정함
  • log4j에서 jdbc.sqlonly로거를 이용하여 쿼리를 출력하도록 하고 dataSourceSpied(log4j-remix)가 쿼리를 정렬함
  • log4j설정에 추가한 jdbc.resultsettable가 쿼리결과를 출력하도록 합니다.(이부분을 생략하면 쿼리결과 출력은 없어짐)


번호 제목 날짜 조회 수
161 magento2 2.1.3을 수동으로 설치하는 방법 2017.02.01 243
160 [PHP7.0]로그파일 위치 2017.05.07 242
159 딥러닝 수학/알고리즘 '한국어' 강의 2016.04.10 242
158 Lagom에서 제공하는 Maven을 이용한 Hello프로젝트 자동생성 및 실행 2018.01.19 241
157 jar파일의 dependency찾는 프로그램 2016.08.11 239
156 sparql에서 concat에제 2015.11.27 238
155 drools를 이용한 로그,rule matching등의 테스트 java프로그램 file 2016.07.21 237
154 bin/cassandra -f -R로 startup할때 NullPointerException오류가 나면 조치할 내용 2016.04.14 237
153 센서테스트 file 2015.05.25 236
152 halyard 1.3의 console을 이용하여 100억건의 데이타에 대한 쿼리수행시 ScannerTimeoutException 발생시 조치사항 2017.09.06 234
151 Ubuntu에서 sbt및 scala설치하기 2017.06.20 234
150 test333 2017.05.01 234
149 운영중인 상태에서 kafka topic삭제하고 재생성하여 처리되지 않은 메세지 모두 삭제하기 2016.10.24 234
148 HAX is not working and emulator runs in emulation mode 메세지가 나오는 경우 file 2015.05.25 234
147 php auction 프로그램 2017.05.14 233
146 [impala]쿼리 수행중 발생하는 오류(due to memory pressure: the memory usage of this transaction, Failed to write to server) 2022.10.05 231
145 hadoop cluster구성된 노드를 확인시 Capacity를 보면 색이 붉은색으로 표시되어 있는 경우나 Unhealthy인 경우 처리방법 2017.08.30 231
144 RDF4J의 rdf4j-server.war가 제공하는 RESTFul API를 이용한 CRUD테스트(트랜잭션처리) 2017.08.30 231
143 [Ranger]계정에 admin권한(grant, create등)의 권한 부여 방법 2023.04.18 227
142 https용 인증서 발급 명령문 예시및 오류 메세지 2018.01.24 227
위로