0 | module Control.RIO.Logging
3 | import Control.RIO.Console
12 | data LogLevel = Trace | Debug | Info | Warning | Error
15 | priority : LogLevel -> Nat
19 | priority Warning = 3
23 | Eq LogLevel where (==) = (==) `on` priority
26 | Ord LogLevel where compare = compare `on` priority
29 | Interpolation LogLevel where
30 | interpolate Trace = "trace"
31 | interpolate Debug = "debug"
32 | interpolate Info = "info"
33 | interpolate Warning = "warning"
34 | interpolate Error = "error"
42 | constructor MkLogger
43 | log : LogLevel -> Lazy String -> IO ()
47 | filter : LogLevel -> Logger -> Logger
48 | filter lvl x = MkLogger $
\l,s => case l >= lvl of
53 | Semigroup Logger where
54 | x <+> y = MkLogger $
\l,s => x.log l s >> y.log l s
58 | neutral = MkLogger $
\_,_ => pure ()
61 | consoleLogger : ConsoleOut -> (LogLevel -> Lazy String -> String) -> Logger
62 | consoleLogger c f = MkLogger $
\l,s => case l of
63 | Error => c.putErr_ (f l s ++ "\n")
64 | _ => c.putStr_ (f l s ++ "\n")
67 | basicConsoleLogger : ConsoleOut -> Logger
68 | basicConsoleLogger c = consoleLogger c $
\l,s => "[\{l}] \{s}"
70 | col : LogLevel -> String
71 | col Trace = show $
colored White "trace"
72 | col Debug = show $
colored Cyan "debug"
73 | col Info = show $
colored Green "info"
74 | col Warning = show $
colored Yellow "warning"
75 | col Error = show $
colored Red "error"
79 | colorConsoleLogger : ConsoleOut -> Logger
80 | colorConsoleLogger c = consoleLogger c $
\l,s => "[\{col l}] \{s}"
105 | facility : Facility -> Nat
106 | facility Kernel = 0
107 | facility UserLevel = 1
108 | facility MailSystem = 2
109 | facility SystemDaemon = 3
110 | facility Authorization = 4
111 | facility SyslogInternal = 5
112 | facility LinePrinter = 6
113 | facility NetworkNews = 7
115 | facility ClockDaemon = 9
116 | facility SecurityMessages = 10
117 | facility FTPDaemon = 11
119 | facility LogAudit = 13
120 | facility LogAlert = 14
121 | facility ClockDaemon2 = 15
123 | severity : LogLevel -> Nat
127 | severity Warning = 5
133 | syslogLogger : Facility -> ConsoleOut -> Logger
137 | let lvl := 8 * facility f + severity l
138 | in "<\{show lvl}> \{s}"
145 | log : Logger => HasIO io => LogLevel -> Lazy String -> io ()
146 | log l s = liftIO (log %search l s)
149 | trace : Logger => HasIO io => Lazy String -> io ()
153 | debug : Logger => HasIO io => Lazy String -> io ()
157 | info : Logger => HasIO io => Lazy String -> io ()
161 | warn : Logger => HasIO io => Lazy String -> io ()
165 | error : Logger => HasIO io => Lazy String -> io ()