- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个基于 Servant 构建的应用程序,现在我想向该应用程序添加日志记录。我浏览了 Haskell 日志包,我认为这个包提供了我需要的:https://github.com/serokell/log-warper/blob/master/log-warper/examples/HowTo.md
经常用于使用 Servant 构建应用程序的“设计模式”之一是使用 Reader monad,因此我对应用程序使用这种方法:我有包含 AppConfig 的 AppEnv。通常,我可以向 AppEnv 添加类似“记录器”实体的内容,以便在处理程序中使用它。虽然,log-warper 不提供“记录器”,但它使用不同的方法代替(我认为似乎是另一个 monad;请参阅上面链接中的示例)。所以我不知道如何将这个记录器与 Servant 一起使用。
这是我的基于 Servant 的应用程序(使用最新版本的 Servant,基于文档中的示例:http://haskell-servant.readthedocs.io/en/stable/tutorial/Server.html#welcome-hoistserver):
data AppEnv = AppEnv { config :: Config }
type MyHandler = ReaderT AppEnv (ExceptT ServantErr IO)
startApp :: AppEnv -> IO ()
startApp env = do
run 16384 (app env)
app :: AppEnv -> Application
app env = serve readerAPI (readerServer env)
readerAPI :: Proxy ReaderAPI
readerAPI = Proxy
readerToHandler :: AppEnv -> Reader AppEnv a -> Handler a
readerToHandler env r = return (runReader r env)
readerServer :: AppEnv -> Server ReaderAPI
readerServer env = hoistServer readerAPI (readerToHandler env) readerServerT
b :: Reader AppEnv Bool
b = do
c <- config <$> ask
let
s = getServerConfig c
p = getServerPort s
return (p == 1)
getServerConfig :: Config -> ServerConfig
getServerConfig (Config s _) = s
getServerPort :: ServerConfig -> Int
getServerPort (ServerConfig _ p) = p
readerServerT :: ServerT ReaderAPI (Reader AppEnv)
readerServerT = a :<|> b where
a :: Reader AppEnv Int
a = return 1797
main :: IO ()
main = do
config <- loadYamlSettings ["etc/config.yaml"] [] useEnv
print (config :: Config)
let
env = AppEnv config
startApp env
最佳答案
一般日志记录
如果你想要一个带有一些复杂选项的通用日志工具 katip看起来是个不错的选择。甚至还有一个小discussion关于如何与仆人一起使用它。你只需要为 katip
添加几个参数给您的 Config
键入,初始化它们,然后您就可以登录您的处理程序。
请求日志记录servant-server
建立在 wai
之上和 warp
所以你可以重用很多那里的工具。如果您只想记录有关对servant 的请求的数据,可以使用wai-logger无需更改您的任何类型。startApp
看起来像这样。
startApp :: AppEnv -> IO ()
startApp env = do
withStdoutLogger $ \logger ->
runSettings (setPort 16384 $ setLogger logger $ defaultSettings) $ app env
关于haskell - 如何将 log-warper 与 Servant 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51243381/
我正在浏览找到的仆人教程 here .有一个部分实现留给用户弄清楚它应该是什么。 type APIFor a i = Get '[JSON] [a] : ReqBody '[JSON
我正在尝试向我的 servant 服务器添加一项功能,该功能将从 Amazon S3 获取文件并将其流式传输回用户。由于文件可能很大,我不想将它们下载到本地然后将它们提供给客户端,我宁愿将它们直接从
我正在尝试使用 Servant 在 Haskell 中构建 Web 服务器,其中部分 API 作为另一个 API 的反向代理。 I found an example 如何实现这一点。但是好像不行: t
我正在关注 the Servant tutorial ,并且我定义了以下 API 类型: type UsersAPI = "users" :> QueryParam "sortby" SortBy :
任何人都可以向我提供一个带有servant-server、wai、warp 等的cookie 的最小示例吗? 例如,具有单个字段“语言”且值为“en”的 Cookie 有没有像 happstack-l
给出以下代码: newtype HelloMessage = HelloMessage { msg :: String } deriving (Generic) instance ToJSON H
我正在使用自定义 monad(带有读取器)轻松地将数据库池等数据传递给我的处理程序(在使用自定义 monad 之前,我曾经将连接作为 fn 参数传递)。 这就是我定义自定义 monad 的方式: ne
我正在这里阅读仆人教程:https://docs.servant.dev/en/stable/tutorial/Server.html#from-combinators-to-handler-argu
我正在尝试按照官方 servant tutorial 使用仆人和松散堆栈来设置基本项目和 stack guide 。一旦我添加 import Servant 堆栈构建就会失败: Could not f
给定以下 Servant 服务器: {-# LANGUAGE DataKinds #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeOpera
使用 servant 时,我想以 JSON 格式返回所有错误。目前,如果请求无法解析,我会看到这样的错误消息,以纯文本形式返回 Failed reading: not a valid json val
我已经使用 Haskell 一年左右了,它太棒了。我最近开始使用Servant;我想使用 SQL 库,例如 Selda,这样一切都是类型安全的。 (当与 Elm 结合时,这真是令人难以置信!:)) 这
默认情况下,即使请求的端点返回 JSON,Servant 也会返回纯字符串请求 $ http $S/signup email=mail@domain.com HTTP/1.1 400 Bad Requ
我有一个仆人应用程序,并针对我的问题查看了以下问题,我收到了 400 个带有 OPTIONS 动词的预检请求: https://github.com/haskell-servant/servant/i
我正在尝试使用 telegram-api 构建一个 Telegram 机器人。到目前为止,我还没有遇到任何问题,因为我可以阅读测试来了解事情是如何工作的,但在使用 Servant 构建 webhook
我有一个带有 rest api 的简单服务应用程序: type API = "items" :> Get '[JSON] [MyData] app :: Application app = serve
我试图了解 Servant 的 serveWithContext 函数的用途。文档指出它不是 ReaderT Monad 的替代品,但我不确定它试图解决 ReaderT 尚未解决的问题。 例如,这是来
我正在尝试将 Servant 身份验证(servant-auth-server 包)与 RIO 作为我的处理程序 monad 结合使用,以避免出现 exceptT 反模式。但是,我无法正确排列类型以处
servant paper简介包含以下示例 API 类型: type Echo = "echo" :> ReqBody ’[PlainText] String
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 7 年前。 Improv
我是一名优秀的程序员,十分优秀!