2012-06-21 2 views
5

우리의 철학에서 오류 로그는 항상 프로그래머 오류로 인해 발생합니다.404 페이지에 오류 로그를 쓰지 않으려면 어떻게합니까?

ERROR (play) ~ 
MyController.myAction action not found 
Action not found 
Action MyController.myAction could not be found. Error raised is No method public static void myAction() was found in class controllers.MyController 
play.exceptions.ActionNotFoundException: Action MyController.myAction not found 
    at play.mvc.ActionInvoker.getActionMethod(ActionInvoker.java:604) 
    at play.mvc.ActionInvoker.resolve(ActionInvoker.java:85) 
    at Invocation.HTTP Request(Play!) 
Caused by: java.lang.Exception: No method public static void myAction() was found in class controllers.MyController 

가 어떻게이 경우 오류 로그를 발행하지 않는 플레이 구성 할 수 있습니다

플레이 1.2.x를, 자극 모드에서

, 존재하지 않는 페이지에 대한 액세스 에러 로그를 트리거? 어쩌면 WARN 로그 수준일까요?

답변

6

이 로깅을위한 코드 (1.2.5RC4을 재생) ActionInvoker.java에 있습니다

catch (ActionNotFoundException e) { 
      Logger.error(e, "%s action not found", e.getAction()); 
      throw new NotFound(String.format("%s action not found", e.getAction())); 
     } 

그래서 그것은 ActionNotFoundException의 로깅 수준을 조정할 수있는 방법이없는 것 같다. 나는 이것이 '오류'수준에 있어서는 안된다는 데 동의한다. 나는 https://play.lighthouseapp.com/dashboard에 표를 여는 것이 좋습니다.

dependencies.yml :

0

솔루션의 가장 우아한 것은 아니지만, 당신은 다음과 같이 변경하여 기본 오류 로그에서 이러한 예외를 필터링하는 아파치 log4j에 엑스트라 패키지에서 ExpressionFilter 클래스를 사용할 수 있습니다

- log4j -> apache-log4j-extras 1.2.17: 
    transitive: false 

< >의 .conf 로깅 :

log4j.appender.<appender>.filter.1=org.apache.log4j.filter.ExpressionFilter 
log4j.appender.<appender>.filter.1.expression=EXCEPTION ~= play.exceptions.ActionNotFoundException 
log4j.appender.<appender>.filter.1.acceptOnMatch=false 

이렇게하면 log4j appender를 새로 만들고 위의 규칙에서 acceptOnMatch 속성을 반전하여 ActionNotFound 예외에 대한 로깅 만 수락하면 이러한 특정 메시지를 별도의 대상으로 리디렉션 할 수 있습니다.

관련 문제