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

问题描述 投票:0回答:1

使用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
,您仍然会在每个请求上收到这些消息。虽然这些大多是无害的,但我至少想在测试中禁用它们,因为它们会弄乱测试运行器的输出。

实际上是什么创建了这些日志条目,以及如何配置/禁用它们?

haskell yesod
1个回答
0
投票

这些日志来自

warp
中的
yesod
帮助器以及脚手架创建的 WAI 中间件。默认情况下似乎没有一个中心位置来配置它,但是可以通过简单地不包含有问题的中间件来禁用它。

在脚手架站点中,这是在

withApp
中的
TestImport.hs
函数中:

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)
(这是有效的,因为 WAI 中间件只是
Application -> Application
类型的函数)。

同样,在脚手架站点中,您只需从

logWare
中的
makeApplication
中删除
Application.hs

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
将您的基础转换为 WAI 应用程序,通过 添加默认中间件 without 日志记录
defaultMiddlewaresNoLogging
,并使用
Network.Wai.Handler.Warp.run
使用 warp 服务器运行生成的 WAI 应用程序`。

© www.soinside.com 2019 - 2024. All rights reserved.