{- Copyright 2016 Joey Hess - - Licensed under the GNU AGPL version 3 or higher. -} {-# LANGUAGE OverloadedStrings #-} module HTTP.Logger where import System.Log.FastLogger import Data.Monoid import Prelude data Logger = Logger TimedFastLogger TimedFastLogger withLogger :: (Logger -> IO a) -> IO a withLogger a = do t <- newTimeCache "%c" withTimedFastLogger t (LogStdout defaultBufSize) $ \stdout -> withTimedFastLogger t (LogStderr defaultBufSize) $ \stderr -> a (Logger stdout stderr) logStdout :: Logger -> String -> IO () logStdout (Logger l _) = sendLogger l logStderr :: Logger -> String -> IO () logStderr (Logger _ l) = sendLogger l sendLogger :: TimedFastLogger -> String -> IO () sendLogger l s = l (\t -> "[" <> toLogStr t <> "] " <> toLogStr s <> "\n")