4 | module Log4Types.JSON
7 | import Log4Types.Core
20 | jsonRenderer : LogRenderer JSON
21 | jsonRenderer = MkLogRenderer
22 | { addField = \name, val, acc => mergeField name (paramToJSON val) acc
23 | , addNested = \name, build, acc => mergeField name (build JNull) acc
24 | , empty = JObject []
25 | , combine = mergeJSON
28 | paramToJSON : LogParamValue -> JSON
29 | paramToJSON (StrVal s) = JString s
30 | paramToJSON (IntVal i) = JNumber (cast i)
31 | paramToJSON (FloatVal f) = JNumber f
32 | paramToJSON (BoolVal b) = JBoolean b
33 | paramToJSON NullVal = JNull
35 | mergeField : String -> JSON -> JSON -> JSON
36 | mergeField name val (JObject fields) = JObject (fields ++ [(name, val)])
37 | mergeField name val _ = JObject [(name, val)]
39 | mergeJSON : JSON -> JSON -> JSON
40 | mergeJSON (JObject xs) (JObject ys) = JObject (xs ++ ys)
41 | mergeJSON (JObject xs) _ = JObject xs
42 | mergeJSON _ (JObject ys) = JObject ys
43 | mergeJSON _ _ = JObject []
51 | paramValueToJSON : LogParamValue -> JSON
52 | paramValueToJSON (StrVal s) = JString s
53 | paramValueToJSON (IntVal i) = JNumber (cast i)
54 | paramValueToJSON (FloatVal f) = JNumber f
55 | paramValueToJSON (BoolVal b) = JBoolean b
56 | paramValueToJSON NullVal = JNull
60 | encodeLoggable : Loggable a => a -> JSON
61 | encodeLoggable val = logFields jsonRenderer val (JObject [])
65 | encodeLoggableStr : Loggable a => a -> String
66 | encodeLoggableStr = show . encodeLoggable
74 | jsonLogStdout : (HasIO io, Loggable a) => LogAction io a
75 | jsonLogStdout = MkLogAction $
putStrLn . encodeLoggableStr