设置 Wai 中间件请求记录器以丢弃(不记录)一些请求

Setup Wai Middleware request logger to drop (not log) some requests

我有一个应用程序,其中 Nginx 反向代理向我的 health 端点发出大量请求。我不想记录这些,所以我的输出日志更小。我还使用 Network.Wai.Middleware.RequestLogger.JSON 将所有内容记录为 JSON,它具有将日志消息格式化为 JSON.

的功能

可以做的一件事是记录一个空的字节串,但我认为可能有一些方法可以不对日志调用进行操作。通过查看 wai-extra.

中的各种 RequestLogger 函数,我不知道该怎么做

有人对如何构建自定义 Middleware 以便不记录某些请求有建议吗?

我通过以下方式创建了自定义格式化程序:

-- | Wai Application Middleware logger
jsonRequestLogger :: IO Middleware
jsonRequestLogger = mkRequestLogger
    $ def { outputFormat = CustomOutputFormatWithDetails dontLogHealthEndpoint }


dontLogHealthEndpoint :: OutputFormatterWithDetails
dontLogHealthEndpoint date req status responseSize duration reqBody response =
    if B.isInfixOf "health" $ rawPathInfo req
        then toLogStr B.empty
        else formatAsJSON date req status responseSize duration reqBody response

这似乎工作正常。不过,我还是想知道有没有更好的办法。