关闭Grails Exception解析器中的所有异常日志记录

时间:2015-01-13 11:31:06

标签: grails

我想:

appenders {
     ...
     'null' name: 'stacktrace'
     ...
}

我会在日志中看到没有例外。我仍然在我的日志中看到GrailsExceptionResolver中记录了异常。

 ERROR errors.GrailsExceptionResolver - Exception occurred when processing request: [GET] /api//products - parameters:

但是对于某些例外情况,我不想记录堆栈跟踪。这些是一些良性的东西,但由于遗留代码,我不能将它们作为异常删除,因为它们在深度调用堆栈中使用。

所以我只需要控制Grails记录每个异常的方式。

任何提示?

1 个答案:

答案 0 :(得分:1)

您可以添加log4j Filter GrailsExceptionResolver。

public class ExceptionLoggerFilter extends Filter {

    String loggerClass;

    @Override
    public int decide(LoggingEvent event) {

        if (event.getLoggerName().equals(loggerClass)) {

            if (event.getThrowableInformation() != null) {
                return Filter.DENY;
            }
        }
        return Filter.NEUTRAL;
    }

    public String getLoggerClass() {
        return loggerClass;
    }

    public void setLoggerClass(String loggerClass) {
        this.loggerClass = loggerClass;
    }

}

并在BootStrap.groovy

中注册此过滤器
 def init = { servletContext ->

        Logger.rootLogger.allAppenders.each { appender ->
            ExceptionLoggerFilter filter = new ExceptionLoggerFilter()
            filter.loggerClass = "org.codehaus.groovy.grails.web.errors.GrailsExceptionResolver"
            filter.activateOptions()
            appender.addFilter(filter)
        }
    }