如何禁用Dropwizard healthcheck的日志记录

时间:2016-09-26 23:11:27

标签: java dropwizard

我有一个我在Dropwizard(0.9)中开发的应用程序,我们内部基础架构的一部分定期ping管理员运行状况检查REST端点以验证服务已启动。这增加了很多:

127.0.0.1 - - [26/Sep/2016:21:47:04 +0000] "GET /healthcheck HTTP/1.1" 200 - "-" "curl/7.43.0" 27

到日志文件。调整我们的内部工具超出范围,因此我想配置记录器以使这些条目静音。不幸的是,我无法识别生成这些消息的类。哪个类负责内置/健康检查端点,并且很简单:

logging:
    loggers:
        "com.class.that.is.responsible": ERROR
yaml配置中的

条目会抑制它们吗?

3 个答案:

答案 0 :(得分:0)

您可以通过将其添加到YAML配置中来抑制它:

server:
  requestLog:
    appenders: []

这些日志条目来自request log,此处有更多信息:

https://www.dropwizard.io/en/latest/manual/configuration.html#request-log

答案 1 :(得分:0)

您可以使用logging filter过滤掉健康检查请求。

这意味着有一个过滤器类:

    @JsonTypeName("healthcheck-filter-factory")
public class HealthCheckLogFilter implements FilterFactory<IAccessEvent> {
    @Override
    public Filter<IAccessEvent> build() {
        return new Filter<IAccessEvent>() {
            @Override
            public FilterReply decide(IAccessEvent event) {
                if (event.getRequestURI().equals("/") || event.getRequestURI().equals("/healthcheck")) {
                    return FilterReply.DENY;
                } else {
                    return FilterReply.NEUTRAL;
                }
            }
        };
    }
}

然后,通过将过滤器的包名称和类名称写入META-INF/services/io.dropwizard.logging.filter.FilterFactory文件来注册过滤器类:

com.my.package.path.goes.here.HealthCheckLogFilter

最后,将其添加到配置.yaml文件:

  requestLog:
    appenders:
      - type: console
        filterFactories:
          - type: healthcheck-filter-factory

答案 2 :(得分:0)

如果您使用的是 DropWizard v2.0.0 或更高版本,则可以使用内置的 UriFilterFactory。您可以通过将其添加到 dropwizard 配置 .yaml 来省略特定端点的日志:

server:
  requestLog:
    appenders:
      - type: console
        filterFactories:
          - type: uri
            uris:
              - "/healthcheck"

注意:DropWizard 文档使用 type: URI,这将不起作用。 source code 中的 @JsonTypeNameuri,因此您必须使用小写名称。