메뉴 건너뛰기

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


번호 제목 글쓴이 날짜 조회 수
741 [CDP7.1.7] oozie sqoop action으로 import혹은 export수행시 발생한 오류에 대한 자세한 로그 확인 하는 방법 gooper 2024.04.19 0
740 [Impala] alter table구문수행시 "WARNINGS: Impala does not have READ_WRITE access to path 'hdfs://nameservice1/DATA/Temp/DB/source/table01_ccd'" 발생시 조치 gooper 2024.04.26 0
739 [CDP7.1.7]Hive Replication수행시 Target Cluster에서 Specified catalog.database.table does not exist 오류 new gooper 2024.05.08 0
738 [CDP7.1.7, Replication]Encryption Zone내 HDFS파일을 비Encryption Zone으로 HDFS Replication시 User hdfs가 아닌 hadoop으로 수행하는 방법 gooper 2024.01.15 1
737 [CDP7.1.7]Hive Replication수행중 Specified catalog.database.table does not exist : hive.db명.table명 오류 발생시 조치방법 gooper 2024.04.05 1
736 [CDP7.1.7][Replication]Table does not match version in getMetastore(). Table view original text mismatch gooper 2024.01.02 2
735 ./gradlew :composeDown 및 ./gradlew :composeUp 를 성공했을때의 메세지 gooper 2023.02.20 6
734 호출 url현황 gooper 2023.02.21 6
733 [vue storefrontui]외부 API통합하기 참고 문서 총관리자 2022.02.09 7
732 [Cloudera Agent] Metadata-Plugin throttling_logger INFO (713 skipped) Unable to send data to nav server. Will try again. gooper 2022.05.16 7
731 [CDP7.1.7, Hive Replication]Hive Replication진행중 "The following columns have types incompatible with the existing columns in their respective positions " 오류 gooper 2023.12.27 7
730 [CDP7.1.7]Oozie job에서 ERROR: Kudu error(s) reported, first error: Timed out: Failed to write batch of 774 ops to tablet 8003f9a064bf4be5890a178439b2ba91가 발생하면서 쿼리가 실패하는 경우 gooper 2024.01.05 7
729 eclipse editor 설정방법 총관리자 2022.02.01 9
728 주문히스토리 조회 총관리자 2022.04.30 10
727 [bitbucket] 2022년 3월 2일 부터 git 작업시 기존에 사용하던 비빌번호를 사용할 수 없도록 변경되었다. 총관리자 2022.04.30 10
726 oozie의 sqoop action수행시 ooize:launcher의 applicationId를 이용하여 oozie:action의 applicationId및 관련 로그를 찾는 방법 gooper 2023.07.26 10
725 주문 생성 데이터 예시 총관리자 2022.04.30 11
724 [EncryptionZone]User:testuser not allowed to do "DECRYPT_EEK" on 'testkey' gooper 2023.06.29 11
723 [CDP7.1.7]Encryption Zone내부/외부 간 데이터 이동(mv,cp)및 CTAS, INSERT SQL시 오류(can't be moved into an encryption zone, can't be moved from an encryption zone) gooper 2023.11.14 11
722 [CDP7.1.7]impala-shell수행시 간헐적으로 "-k requires a valid kerberos ticket but no valid kerberos ticket found." 오류 gooper 2023.11.16 11

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.

위로