메뉴 건너뛰기

Bigdata, Semantic IoT, Hadoop, NoSQL

Bigdata, 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 Impala의 Queries탭에서 여러조건으로 쿼리 찾기 총관리자 2018.05.09 864
160 sqoop export/import등을 할때 driver를 못찾는 오류가 발생하면... 총관리자 2014.05.15 867
159 원격 리포지토리에서 최초 clone시 Permission denied (publickey). 오류발생시 조치사항 총관리자 2017.06.20 871
158 Using The ZooKeeper CLI에서 zkCli의 위치 총관리자 2014.11.02 881
157 solr 6.2에 한글 형태소 분석기(arirang 6.x) 적용 및 테스트 file 총관리자 2017.06.27 881
156 unique한 값 생성 총관리자 2014.04.25 888
155 Current heap configuration for MemStore and BlockCache exceeds the threshold required for successful cluster operation 총관리자 2017.07.18 892
154 동일서버에서 LA와 LC동시에 기동하여 테스트 총관리자 2014.04.01 928
153 column family삭제시 Column family 'delete' does not exist오류 발생하는 경우 총관리자 2014.04.14 932
152 postgresql-9.4에서 FATAL: remaining connection slots are reserved for non-replication superuser connections가 나올때 조치 총관리자 2018.08.16 944
151 하둡 분산 파일 시스템을 기반으로 색인하고 검색하기 총관리자 2014.09.25 951
150 hadoop 기반 문서 검색 총관리자 2014.09.25 957
149 DataNode를 기동할때 "Block pool ID needed, but service not yet registered with NN" 오류 발생에 따른 조치사항 총관리자 2018.05.28 961
148 [Magento]php7에 Composer를 이용하여 Magento 2.1.3 설치 file 총관리자 2017.01.30 971
147 json으로 존재하는 데이터 parsing하기 총관리자 2019.03.25 974
146 특정파일이 생성되어야 action이 실행되는 oozie job만들기(coordinator.xml) 총관리자 2014.05.20 984
145 mybatis와 spring을 org.apache.commons.dbcp2.BasicDataSource의 DataSource로 연동할때 DB설정(참고) 총관리자 2016.10.31 992
144 hive에서 insert overwrite directory.. 로 하면 default column구분자는 'SOH'혹은 't'가 됨 총관리자 2014.05.20 999
143 oozie 에서 sqoop action실행 에러 - 컬럼개수 차이 총관리자 2014.07.17 1002
142 Flume과 Kafka를 사용한 초당 100만개 로그 수집 테스트 file 총관리자 2016.10.31 1021

A personal place to organize information learned during the development of such Hadoop, Hive, Hbase, Semantic IoT, etc.
We are open to the required minutes. Please send inquiries to gooper@gooper.com.

위로