5

In our philosophy, an error log is always caused by a programmer error.

In Play 1.2.x, prod mode, any access to a non-existing page will trigger an error log:

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

How can I configure Play not to issue an error log in this cases? Maybe a WARN log level, at most?

4

2 に答える 2

6

これをログに記録するためのコードは、ActionInvoker.java (play 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()));
        }

したがって、ActionNotFoundException のログ レベルを調整する方法はないようです。これが「エラー」レベルであってはならないことに同意します。https://play.lighthouseapp.com/dashboardでチケットを開くことをお勧めします。

于 2012-06-21T22:19:35.070 に答える
0

最も洗練されたソリューションではありませんがExpressionFilter、Apache log4j Extras パッケージのクラスを使用して、次の変更を加えることで、デフォルトのエラー ログからこれらの例外を除外できます。

dependencies.yml :

- 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 アペンダーを作成し、上記のルールのプロパティを反転して、例外acceptOnMatchのロギングのみを受け入れることにより、これらの特定のメッセージを別の宛先にリダイレクトすることもできます。ActionNotFound

于 2014-04-18T22:37:24.907 に答える