일상일지

[log4j2] 특정 sql 쿼리 로그 filter 사용하여 제외하기 본문

개발

[log4j2] 특정 sql 쿼리 로그 filter 사용하여 제외하기

서호Seoho 2021. 1. 21. 10:21
반응형

안녕하세요. 바한입니다.

오늘은 log4j2를 이용하여, 보고싶지 않은 sql로그를 제외해주는 방법을 적어보겠습니다.

sql로그 뿐만 아니라 다른 로그들에도 적용 가능합니다.

 

 

 

 

log4j2.xml에 다음과 같이 추가

<Logger name="jdbc.sqlonly" additivity="false" level="INFO" >
        <appender-ref ref="RoutingAppender">
        	<ThreadContextMapFilter onMatch="DENY" onMismatch="NEUTRAL"> #여기 추가!
            	#키와 값이 매치할땐 DENY, 매치하지 않을땐 로그 출력
			<KeyValuePair key="log" value="N"/> #여기 추가!
                	#키 이름 log, 값이 N일때
        	</ThreadContextMapFilter> #여기 추가!
		</appender-ref>
</Logger>

 

 

 

 

자바 코드 상으로 필요한 부분에 ThreadContext 추가

//키 이름 log, 값 N을 가진 ThreadContext 생성
ThreadContext.put("log", "N");

//키 이름 log를 지워줌
ThreadContext.remove("log");

 

저는 필요한 Class의 시작부분, 끝 부분에 각각 put과 remove를 넣어주었습니다.

이렇게 하면 ThreadContext의 키가 log, 값이 N일때는 로그를 출력하지 않고, 다른 값이거나 없을 때는 로그를 출력해줍니다.

키와 값은 마음대로 설정하실 수 있습니다.

 

 

 

 

 

 


추가 응용 - .properties 파일에서 YN여부 설정하기

 

자바 파일. conf.properties에서 tempLogYN을 읽어와 ThreadContext 키 log에 값을 넣어줌

String resource = "properties/conf.properties";
Properties properties = new Properties();
		
Reader reader = null;
try {
	reader = Resources.getResourceAsReader(resource);
} catch (IOException e) {
	System.out.println("ERROR");
}
try {
	properties.load(reader);
} catch (IOException e) {
	System.out.println("ERROR");
}

tempLogYN = properties.getProperty("tempLogYN");



ThreadContext.put("log", tempLogYN);

 

conf.properties

tempLogYN=N

 

반응형
Comments