
Hi all, Hot on the heels of the decision to remove logging from WAI, I would like to add it to Yesod. I think (at least to start with), we really need two modifications: a new method in the Yesod typeclass that specifies what to do with log messages, and a function living in the Handler monad that calls that method. I do not have any strong opinions on this topic, so I would appreciate input. Here's a strawman proposal: data LogLevel = LevelInfo | LevelWarn | LevelError | LevelOther Text class Yesod a where messageLogger :: a -> LogLevel -> Text -> IO () messageLogger _ level msg = formatLogMessage level msg >>= Data.Text.Lazy.IO.hPutStrLn System.IO.stderr formatLogMessage :: LogLevel -> Text -> IO Text formatLogMessage = ... -- print timestamp, log level, message, maybe process ID? to stderr -- make sure to expose the logInfo :: MonadIO m => Text -> GGHandler sub master m () logInfo t = do y < getYesod liftIO $ messageLogger y LevelInfo t ... and so on and so forth This should give completely flexibility to users to send their logs anywhere (database, printer, missiles) and in whatever format they want. Other ideas: * It would be nice to include file/line number information, but I'm not sure how easy/possible that will be without requiring the user to manually enter CPP macros. * Actually, that was my only other idea :) Michael