mirror of
https://github.com/Nanaloveyuki/BitLogger.git
synced 2026-05-30 15:42:25 +00:00
44 lines
1.1 KiB
MoonBit
44 lines
1.1 KiB
MoonBit
fn fields_to_json(fields : Array[Field]) -> Json {
|
|
let obj : Map[String, Json] = {}
|
|
for item in fields {
|
|
obj[item.key] = Json::string(item.value)
|
|
}
|
|
Json::object(obj)
|
|
}
|
|
|
|
fn format_record(rec : Record) -> String {
|
|
let prefix = if rec.timestamp_ms == 0UL {
|
|
"[\{rec.level.label()}]"
|
|
} else {
|
|
"[\{rec.timestamp_ms.to_string()}] [\{rec.level.label()}]"
|
|
}
|
|
let base = if rec.target == "" {
|
|
"\{prefix} \{rec.message}"
|
|
} else {
|
|
"\{prefix} [\{rec.target}] \{rec.message}"
|
|
}
|
|
if rec.fields.length() == 0 {
|
|
base
|
|
} else {
|
|
let details = rec.fields.map(fn(f) { "\{f.key}=\{f.value}" }).join(" ")
|
|
"\{base} \{details}"
|
|
}
|
|
}
|
|
|
|
fn format_record_json(rec : Record) -> String {
|
|
let obj : Map[String, Json] = {
|
|
"level": Json::string(rec.level.label()),
|
|
"message": Json::string(rec.message),
|
|
"fields": fields_to_json(rec.fields),
|
|
}
|
|
if rec.timestamp_ms != 0UL {
|
|
obj["timestamp_ms"] = rec.timestamp_ms.to_json()
|
|
}
|
|
if rec.target == "" {
|
|
Json::object(obj).stringify()
|
|
} else {
|
|
obj["target"] = Json::string(rec.target)
|
|
Json::object(obj).stringify()
|
|
}
|
|
}
|