5 | module Log4Types.ANSI
8 | import public Control.ANSI
9 | import Log4Types.Core
10 | import Log4Types.Format
12 | import Log4Types.Message
21 | severityColor : Severity -> Color
22 | severityColor Debug = Green
23 | severityColor Info = Blue
24 | severityColor Warning = Yellow
25 | severityColor Error = Red
32 | fmtColouredSeverity : Severity -> String
33 | fmtColouredSeverity sev = show $
colored (severityColor sev) (fmtSeverity sev)
40 | colouredTextRenderer : LogRenderer String
41 | colouredTextRenderer = MkLogRenderer
42 | { addField = \name, val, acc =>
43 | let field = if name == "severity"
45 | StrVal s => colourize s
46 | _ => name ++ "=" ++ show val
47 | else name ++ "=" ++ show val
48 | in if acc == "" then field else acc ++ " " ++ field
49 | , addNested = \name, build, acc =>
50 | let nested = build ""
51 | prefixed = name ++ "." ++ nested
52 | in if acc == "" then prefixed else acc ++ " " ++ prefixed
54 | , combine = \a, b =>
56 | else if b == "" then a
60 | colourize : String -> String
61 | colourize "Debug" = fmtColouredSeverity Debug
62 | colourize "Info" = fmtColouredSeverity Info
63 | colourize "Warning" = fmtColouredSeverity Warning
64 | colourize "Error" = fmtColouredSeverity Error
65 | colourize other = "severity=\"" ++ other ++ "\""
72 | stdoutIsTTY : HasIO io => io Bool
73 | stdoutIsTTY = isTTY stdout
78 | fmtColouredMsg : Msg -> String
79 | fmtColouredMsg msg =
80 | let sevPart = fmtColouredSeverity msg.severity
82 | fieldsPart = foldl addFieldStr "" msg.fields
83 | in if fieldsPart == ""
84 | then sevPart ++ " " ++ textPart
85 | else sevPart ++ " " ++ textPart ++ " " ++ fieldsPart
87 | addFieldStr : String -> (String, LogParamValue) -> String
88 | addFieldStr acc (k, v) =
89 | let part = k ++ "=" ++ show v
90 | in if acc == "" then part else acc ++ " " ++ part
97 | fmtMsgForTTY : (isTTY : Bool) -> Msg -> String
98 | fmtMsgForTTY True = fmtColouredMsg
99 | fmtMsgForTTY False = show
104 | colouredLogStdout : HasIO io => io (LogAction io Msg)
105 | colouredLogStdout = do
107 | pure $
cmap (fmtMsgForTTY tty) logStringStdout