在我们的理念中,错误日志总是由程序员错误引起。
在Play 1.2.x,prod模式下,对不存在页面的任何访问都会触发错误日志:
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
在这种情况下,如何配置Play不发出错误日志?最多可能是WARN
日志级别?
答案 0 :(得分:6)
记录它的代码位于ActionInvoker.java(播放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打开一张票。
答案 1 :(得分:0)
虽然不是最优雅的解决方案,但您可以使用Apache log4j Extras包中的ExpressionFilter
类从默认错误日志中过滤掉这些异常,并进行以下更改:
<强> dependencies.yml 强>:
- log4j -> apache-log4j-extras 1.2.17:
transitive: false
<强>&LT;记录&GT;的.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
异常的日志记录,将这些特定消息重定向到单独的目标。