使用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
,您仍然会在每个请求上收到这些消息。虽然这些大多是无害的,但我至少想在测试中禁用它们,因为它们会弄乱测试运行器的输出。
实际上是什么创建了这些日志条目,以及如何配置/禁用它们?
这些日志来自
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 应用程序`。