개발
[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
반응형