728x90

spring과 mybatis로 개발시에 공통 부분의 sql log를 숨기고 싶을때가 있다.

 

해당 sql 로그를 숨기려면 org.codehaus.janino 라이브러리가 필요하다.

 

pom.xml

<!-- 추가(logback)-->
	<dependency>
		<groupId>ch.qos.logback</groupId>
		<artifactId>logback-core</artifactId>
		<version>1.3.0</version>
	</dependency>
	<dependency>
		<groupId>ch.qos.logback</groupId>
		<artifactId>logback-classic</artifactId>
		<version>1.3.0</version>
	</dependency>
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>jul-to-slf4j</artifactId>
		<version>2.0.0</version>
	</dependency>
	<!-- //logback(logback)-->

    <dependency>
    <groupId>org.codehaus.janino</groupId>
    <artifactId>janino</artifactId>
    <version>3.0.6</version>
    </dependency>

logback.xml에 아래부분을 추가해 준다.

<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
    <evaluator>
        <expression>message.contains("NOT_SQL_LOG")</expression>
    </evaluator>
    <OnMismatch>NEUTRAL</OnMismatch>
    <OnMatch>DENY</OnMatch>
</filter>

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

	<property name="LOG_PATH" value="logs" />
	<property name="LOG_FILE_NAME" value="log" />

	<appender name="FILE"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${LOG_PATH}/${LOG_FILE_NAME}.log</file>
		<encoder>
			<!-- <charset>UTF-8</charset> <pattern>%d{[yyyy.MM.dd HH:mm:ss]} [%-35.35c{1}:%line] 
				%-5p %m%n</pattern> -->
			<pattern>
				%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
			</pattern>
		</encoder>
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_PATH}/${LOG_FILE_NAME}.%d{yyyy-MM-dd}.%i.log
			</fileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>50MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
			<maxHistory>7</maxHistory>
			<totalSizeCap>1GB</totalSizeCap>
		</rollingPolicy>
	</appender>

	<!-- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
		<layout class="ch.qos.logback.classic.PatternLayout"> <charset>UTF-8</charset> 
		<Pattern>%d{[yyyy.MM.dd HH:mm:ss]} [%-35.35c{1}:%line] %-5p %m%n</Pattern> 
		</layout> </appender> -->

	<appender name="STDOUT"
		class="ch.qos.logback.core.ConsoleAppender">
		<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
			<evaluator>
				<expression>message.contains("NOT_SQL_LOG")</expression>
			</evaluator>
			<OnMismatch>NEUTRAL</OnMismatch>
			<OnMatch>DENY</OnMatch>
		</filter>
		<encoder>
			<pattern>%d{HH:mm:ss.SSS}[%thread] %-5level %logger{36} - %msg%n
			</pattern>
		</encoder>
	</appender>

	<logger name="jdbc.sqltiming" level="INFO" />
	<logger name="jdbc.audit" level="WARN" />
	<logger name="jdbc.resultset" level="WARN" />
	<logger name="jdbc.resultsettable" level="INFO" />
	<logger name="jdbc.sqlonly" level="WARN" />
	<logger name="jdbc.connection" level="WARN" />

	<root level="DEBUG">
		<appender-ref ref="FILE" />
		<appender-ref ref="STDOUT" />
	</root>

	<typeAliases></typeAliases>
	
</configuration>

mybatis sql xml에 위의 --NOT_SQL_LOG를 추가하면 콘솔에 로그가 출력되지 않는다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="egovframework.basic.log.service.impl.WebLogMapper">

	<!-- 로그 출력 안됨 -->
	<insert id="test1" parameterType="Map">
		-- NOT_SQL_LOG
		INSERT INTO ${schemaNm}.log
		(
			session_id
		  , ip
		)
		VALUES
		(
			#{sessionId}
		  , #{ip}
		)
	</insert>
	
    	<!-- 로그 출력 -->
	<insert id="test2" parameterType="Map">
		INSERT INTO ${schemaNm}.log
		(
			session_id
		  , ip
		)
		VALUES
		(
			#{sessionId}
		  , #{ip}
		)
	</insert>
	
</mapper>
728x90

+ Recent posts