log4j 특정 클래스 제외 / 클래스별 설정

2017. 7. 4. 14:02framework/etc framework

log4j 특정 클래스 제외 / 클래스별 설정

 

 

log4j 로 root에서 INFO 레벨로 로그를 console에 출력하고 있었다.

 

INFO 레벨의 로그들은 모두 출력되는데 그 중에서 특정 로그를 보고싶지 않거나 출력하지 않도록 하고싶다.

 

 

나의 로그 패턴은 다음과 같다.

1
[%5p] %d{hh\:mm s} (%F\:%L) %c{1}.%M \: %m%n
cs

해석하자면 로그레벨 발생한시간 파일명 라인수 카테고리 메소드 내용 순이다.

 

위 패턴으로 console에 출력되는 로그 모양은 다음과 같다.

1
2
3
4
5
6
7
8
9
[ INFO] 01:34 56 (AbstractHandlerMethodMapping.java:220) RequestMappingHandlerMapping.registerHandlerMethod : Mapped ...
[ INFO] 01:34 56 (AbstractHandlerMethodMapping.java:220) RequestMappingHandlerMapping.registerHandlerMethod : Mapped ...
[ INFO] 01:34 56 (AbstractHandlerMethodMapping.java:220) RequestMappingHandlerMapping.registerHandlerMethod : Mapped ...
[ INFO] 01:34 56 (AbstractHandlerMethodMapping.java:220) RequestMappingHandlerMapping.registerHandlerMethod : Mapped ...
[ INFO] 01:34 56 (AbstractHandlerMethodMapping.java:220) RequestMappingHandlerMapping.registerHandlerMethod : Mapped ...
[ INFO] 01:34 56 (AbstractHandlerMethodMapping.java:220) RequestMappingHandlerMapping.registerHandlerMethod : Mapped ...
[ INFO] 01:34 56 (AbstractHandlerMethodMapping.java:220) RequestMappingHandlerMapping.registerHandlerMethod : Mapped ...
[ INFO] 01:34 56 (AbstractHandlerMethodMapping.java:220) RequestMappingHandlerMapping.registerHandlerMethod : Mapped ...
[ INFO] 01:34 56 (AbstractHandlerMethodMapping.java:220) RequestMappingHandlerMapping.registerHandlerMethod : Mapped ...
cs

로그를 해석해보면

레벨 : INFO

로그발생 파일 : AbstractHandlerMethodMapping.java 

카테고리 : RequestMappingHandlerMapping 카테고리의

메소드 : registerHandlerMethod

와 같은 형식을 나타내고 있다.

 

이녀석은 단순히 request mapping 정보를 보여주는 녀석이다.

 

굳이 필요가 없어서 제외하려고 한다.

 



 

제외하는 방법은 특정 카테고리(클래스)에서 발생하는 로그의 레벨을 조정해서 내가 보고있는 로그레벨에서 나타나지 않게 하는 방식이다.

 

 

가장 처음 할 것은 제외시킬 클래스를 찾는 방법이다.

 

위 console 에서 내가 제외시켜야 하는 클래스는 무엇일까 ?

 

AbstractHandlerMethodMapping.java로 착각하기 쉽다.

 

하지만 AbstractHandlerMethodMapping.java는 로그가 발생한 파일일뿐 실제로 로그를 출력하는 녀석은 그 뒤에 있는 RequestMappingHandlerMapping 카테고리 즉 이녀석이 로그를 발생하는 근본적인 클래스라고 생각해야 한다.

 

패턴을 살펴보면 %F로 출력되는 녀석이 아니라 %c 로 출력되는 녀석을 찾으면 된다.

 

RequestMappingHandlerMapping 의 패키지를 찾아보았다.

출처 : http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMapping.html

 

패키지 : org.springframework.web.servlet.mvc.method.annotation

클래스 : RequestMappingHandlerMapping

 



 

log4j.properties 에 선언하는 방법은 다음과 같다.

1
log4j.logger.org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping=WARN
cs

log4j.logger.제외하려는 클래스의 패키지명.제외하려는 클래스명=레벨

 

내가 보고 싶지 않은 녀석의 로그레벨을 WARN으로 올려줌으로써 INFO 레벨에서는 보이지 않도록 한 방법이다.

 

이로서 클레스별로 내가 보고싶으 않는 로그의 레벨을 조정해서 출력하지 않을 수 있다.