🎉 Release BitLogger v0.1.0 core

This commit is contained in:
Nanaloveyuki
2026-05-08 14:18:27 +08:00
parent d8687a8371
commit ff3d32a26a
16 changed files with 558 additions and 0 deletions
+43
View File
@@ -0,0 +1,43 @@
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()
}
}