2012-06-21 16 views
5

En nuestra filosofía, un registro de errores siempre es causado por un error del programador.¿Cómo hacer que las páginas 404 no escriban un registro de errores?

En juego 1.2.x, prod modo, cualquier acceso a una página no existente se disparará un registro de errores:

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 

¿Cómo puedo configurar el juego no para emitir un registro de errores en estos casos? ¿Tal vez un nivel de registro WARN, como máximo?

Respuesta

6

El código para darse de esto se encuentra en ActionInvoker.java (jugar 1.2.5RC4):

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

por lo que parece que no hay manera de ajustar el nivel de registro de la ActionNotFoundException. Estoy de acuerdo en que esto no debe estar en el nivel de "error". Recomendaría abrir un boleto al https://play.lighthouseapp.com/dashboard.

0

Aunque no es el más elegante de soluciones, se puede utilizar la clase ExpressionFilter del paquete Apache log4j Extras para filtrar estas excepciones fuera de su registro de errores por defecto con los siguientes cambios:

dependencies.yml:

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

<registro> .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 

Esto también le permite redirigir esos mensajes específicos a un destino diferente creando un nuevo apilador log4j e invirtiendo la propiedad acceptOnMatch en la regla anterior para aceptar solo el registro para la excepción ActionNotFound.

Cuestiones relacionadas