2012-06-21 8 views
5

Nella nostra filosofia, un log degli errori è sempre causato da un errore del programmatore.Come fare 404 pagine non scrivere un log degli errori?

In Play 1.2.x, modalità prod, qualsiasi accesso ad una pagina inesistente attiverà un log degli errori:

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 

Come posso configurare PLAY per non emettere un log degli errori in questi casi? Forse un livello di log WARN, al massimo?

risposta

6

Il codice per il login questo si trova nel ActionInvoker.java (Giocano 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())); 
     } 

Così sembra che ci sia alcun modo per regolare il livello di registrazione del ActionNotFoundException. Sono d'accordo che questo non dovrebbe essere al livello di 'errore'. Consiglierei di aprire un biglietto allo https://play.lighthouseapp.com/dashboard.

0

Pur non essendo il più elegante di soluzioni, è possibile utilizzare la classe ExpressionFilter dal pacchetto Apache log4j Extra per filtrare queste eccezioni dal vostro log degli errori di default con le seguenti modifiche:

dependencies.yml:

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

<accedendo> 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 

Ciò consente inoltre di reindirizzare tali messaggi specifici verso una destinazione separata creando un nuovo appender log4j e invertendo la proprietà acceptOnMatch nella regola precedente per accettare solo la registrazione per l'eccezione ActionNotFound.