haskell 在yesod中配置/禁用请求日志记录

dkqlctbz  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(86)

使用yesod 1.6.2.1,当创建一个新的应用程序时(无论是使用脚手架还是使用内置的warp port foundation),您都会得到这样的请求日志:

127.0.0.1 - - [18/Aug/2023:11:19:54 +0200] "GET / HTTP/1.1" 200 ...

我看不出它们是在哪里/如何配置的。Yesod类型类附带了一个shouldLogIO成员,但即使它被设置为return False,您仍然会在每个请求上获得这些消息。虽然这些大多数都是无害的,但我至少想在测试中禁用它们,因为它们会扰乱测试运行器的输出。
实际上是什么创建了这些日志条目,以及如何配置/禁用它们?

vs3odd8k

vs3odd8k1#

这些日志来自一个阿威中间件,yesod中的warp助手和脚手架创建了这个中间件。默认情况下,似乎没有一个中心位置来配置它,但是可以通过简单地不包括中间件来禁用它。
在脚手架站点中,这是在TestImport.hs中的withApp函数中:

withApp :: SpecWith (TestApp App) -> Spec
withApp = before $ do
    settings <- loadYamlSettings
        ["config/test-settings.yml", "config/settings.yml"]
        []
        useEnv
    foundation <- makeFoundation settings
    wipeDB foundation
    logWare <- liftIO $ makeLogWare foundation
    return (foundation, logWare)

这里只需将(foundation, logWare)替换为(foundation, id)(这是可行的,因为阿威中间件只是Application -> Application类型的函数)。
类似地,在搭建的站点中,您可以从Application.hs中的makeApplication中删除logWare

makeApplication :: App -> IO Application
makeApplication foundation = do
    logWare <- makeLogWare foundation
    -- Create the WAI application and apply middlewares
    appPlain <- toWaiAppPlain foundation
    return $ logWare $ defaultMiddlewaresNoLogging appPlain

当不使用搭建的站点时,要在没有默认日志中间件的情况下运行应用程序,只需做一些类似搭建的站点的事情,并通过toWaiAppPlain将您的基础转换为阿威应用程序,通过defaultMiddlewaresNoLogging添加默认的中间件 * 而不使用 * 日志记录,并使用Network.Wai.Handler.Warp.run使用warp服务器`运行最终的WAI应用程序。

相关问题