module Photoname.Log
( initLogging
, lname
, logTest
, debugM, infoM, noticeM, warningM, errorM, criticalM, alertM, emergencyM
)
where
import System.IO ( Handle, stdout )
import System.Log.Handler.Simple ( GenericHandler, streamHandler )
import System.Log.Logger
import Photoname.Common ( Verbosity (Quiet, Verbose) )
lname :: String
lname :: String
lname = String
rootLoggerName
initLogging :: Verbosity -> IO ()
initLogging :: Verbosity -> IO ()
initLogging Verbosity
verbosity = do
String -> (Logger -> Logger) -> IO ()
updateGlobalLogger String
lname ((Logger -> Logger) -> IO ())
-> ([GenericHandler Handle] -> Logger -> Logger)
-> [GenericHandler Handle]
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [GenericHandler Handle] -> Logger -> Logger
forall a. LogHandler a => [a] -> Logger -> Logger
setHandlers ([GenericHandler Handle] -> IO ())
-> IO [GenericHandler Handle] -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Verbosity -> IO [GenericHandler Handle]
handlers Verbosity
verbosity
case Verbosity
verbosity of
Verbosity
Quiet -> () -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
Verbose Priority
loggerLevel -> String -> (Logger -> Logger) -> IO ()
updateGlobalLogger String
lname ((Logger -> Logger) -> IO ()) -> (Logger -> Logger) -> IO ()
forall a b. (a -> b) -> a -> b
$ Priority -> Logger -> Logger
setLevel Priority
loggerLevel
handlers :: Verbosity -> IO [GenericHandler Handle]
handlers :: Verbosity -> IO [GenericHandler Handle]
handlers Verbosity
Quiet = [GenericHandler Handle] -> IO [GenericHandler Handle]
forall (f :: * -> *) a. Applicative f => a -> f a
pure []
handlers (Verbose Priority
_) = [IO (GenericHandler Handle)] -> IO [GenericHandler Handle]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence [Handle -> Priority -> IO (GenericHandler Handle)
streamHandler Handle
stdout Priority
DEBUG]
logTest :: IO ()
logTest :: IO ()
logTest = do
String -> String -> IO ()
debugM String
lname String
"log test message DEBUG 1 of 8"
String -> String -> IO ()
infoM String
lname String
"log test message INFO 2 of 8"
String -> String -> IO ()
noticeM String
lname String
"log test message NOTICE 3 of 8"
String -> String -> IO ()
warningM String
lname String
"log test message WARNING 4 of 8"
String -> String -> IO ()
errorM String
lname String
"log test message ERROR 5 of 8"
String -> String -> IO ()
criticalM String
lname String
"log test message CRITICAL 6 of 8"
String -> String -> IO ()
alertM String
lname String
"log test message ALERT 7 of 8"
String -> String -> IO ()
emergencyM String
lname String
"log test message EMERGENCY 8 of 8"