메뉴 건너뛰기

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가 쿼리결과를 출력하도록 합니다.(이부분을 생략하면 쿼리결과 출력은 없어짐)


번호 제목 글쓴이 날짜 조회 수
661 [Kerberos인증] /var/log/krb5kdc.log파일 기준으로 인증요청(AS), 티켓확인(TGS)이 진행되는 로그 기록 gooper 2022.09.21 36
660 spark에서 hive table을 읽어 출력하는 예제 소스 총관리자 2017.03.09 37
659 [KUDU] kudu tablet server여러가지 원인에 의해서 corrupted상태가 된 경우 복구방법 gooper 2023.03.28 37
658 bash는 PS1 변수를 통해 프롬프트의 모양을 바꿀 수 있다. 총관리자 2016.03.30 38
657 eclipse 3.1 단축키 정리파일 총관리자 2017.01.02 38
656 [u-Auctions]목록이 1개만 나오는 문제 총관리자 2017.05.29 38
655 [Hue]Hue의 메타정보를 담고 있는 desktop_document테이블과 desktop_document2의 관계 총관리자 2022.05.09 38
654 [TLS/SSL]Cloudera 6.3.4기준 Oozie Web UI TLS설정 항목및 설정값 총관리자 2022.05.13 38
653 github에 있는 프로젝트와 로컬에서 작업한 프로젝트 합치기 총관리자 2016.11.22 40
652 DeviceType이 o:motion-sensor_33 이거나 o:motion-sensor_32 경우의 sparql문장은 다음과 같다. 총관리자 2017.08.16 40
651 커리 변경 이벤트를 처리하기 위한 구현클래스 총관리자 2016.07.21 41
650 [oracle]10자리 timestamp값을 날짜로 변환하는 방법 총관리자 2022.04.14 41
649 magento2 설치후 초기화면이 깨지는 문제 file 총관리자 2017.01.31 42
648 windows 혹은 mac에서 docker설치하기 위한 파일 총관리자 2017.10.13 42
647 RDF4J의 rdf4j-server.war가 제공하는 RESTFul API를 이용한 CRUD테스트(트랜잭션처리) 총관리자 2017.08.30 43
646 python실행시 ValueError: zero length field name in format오류 해결방법 총관리자 2016.05.27 44
645 Spark Streaming 코드레벨단에서의 성능개선 총관리자 2016.10.31 44
644 원격의 origin/master를 기준으로 dev branch를 만들어 작업후 원격의 origin/dev에 push하는 방법 file 총관리자 2016.11.22 44
643 new Gson().toJson(new ObjectId())을 사용하면 값이 다르게 나오는 경우가 있음 총관리자 2016.12.23 44
642 특정 단계의 commit상태로 만들기(이렇게 하면 중간에 반영된 모든 commit를 history가 삭제된다) 총관리자 2016.11.17 45

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.

위로