2013-05-02 22 views
10

私は現在、Network.Wai.Middleware.RequestLoggerからミドルウェアlogStdoutDevを実行していますが、パスとAcceptヘッダー(おそらく他のヘッダーも)だけを記録します。私はPOSTとPUTリクエストのボディも見たいと思っています。この本体はjsonになるので、stdoutに出力するだけで問題ありません。WAI/scottyでHTTPリクエスト全体を記録する方法はありますか?

すべてを記録しているが、見つからなかったWAIミドルウェアを検索しました。私は、POSTボディを抽出して自分自身に戻すものを書くために、WAI内部については十分に分かっていないので、今はその学習曲線を避けることを望んでいました。

type Application = Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived 

あなたがする必要があるすべてはあなたが好きなログに記録するハンドラを定義し、デリゲート:

type Middleware = Application -> Application 

そしてApplicationがちょうどハンドラである:

+0

私は現在、各ルートハンドラで "body >> = liftIO。putStrLn。show"を使用していますが、明らかにDRYではありません。私は一歩早くそれをやりたい。 – Gurgeh

答えて

4

WAI MiddlewareApplicationを超えるだけの変換であります「実際の作業」下流:

-- note that this is equivalent to Application -> Application 
logAllMiddleware :: Application -> Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived 
logAllMiddleware app req respond = do 
    print . unpack . requestBody req 
    app req respond 

ghcへのアクセスなしでこのコードを書いたことに注意してください。完全に正しいとは限りません。

関連する問題