module Haskell.Debug.Adapter.Logger where
import Haskell.Debug.Adapter.Constant
import System.IO
import qualified System.Log.Logger as L
import qualified System.Log.Formatter as L
import qualified System.Log.Handler as LH
import qualified System.Log.Handler.Simple as LHS
setUpLogger :: FilePath -> L.Priority -> IO ()
setUpLogger :: FilePath -> Priority -> IO ()
setUpLogger FilePath
path Priority
lv = do
IO ()
L.removeAllHandlers
Handle
logStream <- FilePath -> IOMode -> IO Handle
openFile FilePath
path IOMode
AppendMode
Handle -> TextEncoding -> IO ()
hSetEncoding Handle
logStream TextEncoding
utf8
Handle -> BufferMode -> IO ()
hSetBuffering Handle
logStream BufferMode
NoBuffering
GenericHandler Handle
logH <- Handle -> Priority -> IO (GenericHandler Handle)
LHS.streamHandler Handle
logStream Priority
lv
let logHandle :: GenericHandler Handle
logHandle = GenericHandler Handle
logH {closeFunc :: Handle -> IO ()
LHS.closeFunc = Handle -> IO ()
hClose}
logFormat :: LogFormatter a
logFormat = FilePath -> FilePath -> LogFormatter a
forall a. FilePath -> FilePath -> LogFormatter a
L.tfLogFormatter FilePath
_LOG_FORMAT_DATE FilePath
_LOG_FORMAT
logHandler :: GenericHandler Handle
logHandler = GenericHandler Handle
-> LogFormatter (GenericHandler Handle) -> GenericHandler Handle
forall a. LogHandler a => a -> LogFormatter a -> a
LH.setFormatter GenericHandler Handle
logHandle LogFormatter (GenericHandler Handle)
forall a. LogFormatter a
logFormat
FilePath -> (Logger -> Logger) -> IO ()
L.updateGlobalLogger FilePath
L.rootLoggerName ((Logger -> Logger) -> IO ()) -> (Logger -> Logger) -> IO ()
forall a b. (a -> b) -> a -> b
$ [GenericHandler Handle] -> Logger -> Logger
forall a. LogHandler a => [a] -> Logger -> Logger
L.setHandlers ([] :: [LHS.GenericHandler Handle])
FilePath -> (Logger -> Logger) -> IO ()
L.updateGlobalLogger FilePath
_LOG_NAME ((Logger -> Logger) -> IO ()) -> (Logger -> Logger) -> IO ()
forall a b. (a -> b) -> a -> b
$ [GenericHandler Handle] -> Logger -> Logger
forall a. LogHandler a => [a] -> Logger -> Logger
L.setHandlers [GenericHandler Handle
logHandler]
FilePath -> (Logger -> Logger) -> IO ()
L.updateGlobalLogger FilePath
_LOG_NAME ((Logger -> Logger) -> IO ()) -> (Logger -> Logger) -> IO ()
forall a b. (a -> b) -> a -> b
$ Priority -> Logger -> Logger
L.setLevel Priority
lv
FilePath -> (Logger -> Logger) -> IO ()
L.updateGlobalLogger FilePath
_LOG_REQUEST ((Logger -> Logger) -> IO ()) -> (Logger -> Logger) -> IO ()
forall a b. (a -> b) -> a -> b
$ [GenericHandler Handle] -> Logger -> Logger
forall a. LogHandler a => [a] -> Logger -> Logger
L.setHandlers [GenericHandler Handle
logHandler]
FilePath -> (Logger -> Logger) -> IO ()
L.updateGlobalLogger FilePath
_LOG_REQUEST ((Logger -> Logger) -> IO ()) -> (Logger -> Logger) -> IO ()
forall a b. (a -> b) -> a -> b
$ Priority -> Logger -> Logger
L.setLevel Priority
lv
FilePath -> (Logger -> Logger) -> IO ()
L.updateGlobalLogger FilePath
_LOG_RESPONSE ((Logger -> Logger) -> IO ()) -> (Logger -> Logger) -> IO ()
forall a b. (a -> b) -> a -> b
$ [GenericHandler Handle] -> Logger -> Logger
forall a. LogHandler a => [a] -> Logger -> Logger
L.setHandlers [GenericHandler Handle
logHandler]
FilePath -> (Logger -> Logger) -> IO ()
L.updateGlobalLogger FilePath
_LOG_RESPONSE ((Logger -> Logger) -> IO ()) -> (Logger -> Logger) -> IO ()
forall a b. (a -> b) -> a -> b
$ Priority -> Logger -> Logger
L.setLevel Priority
lv
FilePath -> (Logger -> Logger) -> IO ()
L.updateGlobalLogger FilePath
_LOG_APP ((Logger -> Logger) -> IO ()) -> (Logger -> Logger) -> IO ()
forall a b. (a -> b) -> a -> b
$ [GenericHandler Handle] -> Logger -> Logger
forall a. LogHandler a => [a] -> Logger -> Logger
L.setHandlers [GenericHandler Handle
logHandler]
FilePath -> (Logger -> Logger) -> IO ()
L.updateGlobalLogger FilePath
_LOG_APP ((Logger -> Logger) -> IO ()) -> (Logger -> Logger) -> IO ()
forall a b. (a -> b) -> a -> b
$ Priority -> Logger -> Logger
L.setLevel Priority
lv
FilePath -> (Logger -> Logger) -> IO ()
L.updateGlobalLogger FilePath
_LOG_THREAD_MGR ((Logger -> Logger) -> IO ()) -> (Logger -> Logger) -> IO ()
forall a b. (a -> b) -> a -> b
$ [GenericHandler Handle] -> Logger -> Logger
forall a. LogHandler a => [a] -> Logger -> Logger
L.setHandlers [GenericHandler Handle
logHandler]
FilePath -> (Logger -> Logger) -> IO ()
L.updateGlobalLogger FilePath
_LOG_THREAD_MGR ((Logger -> Logger) -> IO ()) -> (Logger -> Logger) -> IO ()
forall a b. (a -> b) -> a -> b
$ Priority -> Logger -> Logger
L.setLevel Priority
lv
FilePath -> (Logger -> Logger) -> IO ()
L.updateGlobalLogger FilePath
_LOG_EVENT ((Logger -> Logger) -> IO ()) -> (Logger -> Logger) -> IO ()
forall a b. (a -> b) -> a -> b
$ [GenericHandler Handle] -> Logger -> Logger
forall a. LogHandler a => [a] -> Logger -> Logger
L.setHandlers [GenericHandler Handle
logHandler]
FilePath -> (Logger -> Logger) -> IO ()
L.updateGlobalLogger FilePath
_LOG_EVENT ((Logger -> Logger) -> IO ()) -> (Logger -> Logger) -> IO ()
forall a b. (a -> b) -> a -> b
$ Priority -> Logger -> Logger
L.setLevel Priority
lv
FilePath -> (Logger -> Logger) -> IO ()
L.updateGlobalLogger FilePath
_LOG_GHCI_STDOUT ((Logger -> Logger) -> IO ()) -> (Logger -> Logger) -> IO ()
forall a b. (a -> b) -> a -> b
$ [GenericHandler Handle] -> Logger -> Logger
forall a. LogHandler a => [a] -> Logger -> Logger
L.setHandlers [GenericHandler Handle
logHandler]
FilePath -> (Logger -> Logger) -> IO ()
L.updateGlobalLogger FilePath
_LOG_GHCI_STDOUT ((Logger -> Logger) -> IO ()) -> (Logger -> Logger) -> IO ()
forall a b. (a -> b) -> a -> b
$ Priority -> Logger -> Logger
L.setLevel Priority
lv
FilePath -> (Logger -> Logger) -> IO ()
L.updateGlobalLogger FilePath
_LOG_WATCH ((Logger -> Logger) -> IO ()) -> (Logger -> Logger) -> IO ()
forall a b. (a -> b) -> a -> b
$ [GenericHandler Handle] -> Logger -> Logger
forall a. LogHandler a => [a] -> Logger -> Logger
L.setHandlers [GenericHandler Handle
logHandler]
FilePath -> (Logger -> Logger) -> IO ()
L.updateGlobalLogger FilePath
_LOG_WATCH ((Logger -> Logger) -> IO ()) -> (Logger -> Logger) -> IO ()
forall a b. (a -> b) -> a -> b
$ Priority -> Logger -> Logger
L.setLevel Priority
lv