///|
fn main {
println("moonbit-log 示例应用")
println("")
basic_usage()
json_logging()
audit_logging()
level_filtering()
structured_logging()
async_logging()
benchmark_demo()
println("所有示例执行完成")
}
///|
fn basic_usage() -> Unit {
println("[基本日志]")
let fmt = @log.compact_formatter()
let mem = @log.MemoryHandler::new(@log.Level::Debug, fmt)
let logger = @log.Logger::new()
logger.add_handler(
@log.make_handler(fn(e) { mem.log(e) }, fn() { }, fn() { }),
)
logger.debug("debug消息")
logger.info("info消息")
logger.warn("warn消息")
logger.error("error消息")
let lines = mem.formatted_lines()
for line in lines {
println(" " + line)
}
}
///|
fn json_logging() -> Unit {
println("[JSON日志]")
let fmt = @log.json_formatter()
let mem = @log.MemoryHandler::new(@log.Level::Debug, fmt)
let logger = @log.Logger::new()
logger.add_handler(
@log.make_handler(fn(e) { mem.log(e) }, fn() { }, fn() { }),
)
logger.log_with(@log.Level::Info, "用户登录", [
("user_id", "42"),
("ip", "192.168.1.1"),
])
let lines = mem.formatted_lines()
for line in lines {
println(" " + line)
}
}
///|
fn audit_logging() -> Unit {
println("[审计日志]")
let fmt = @log.audit_formatter("|")
let audit = @log.AuditHandler::new(@log.Level::Info, fmt, 100)
let logger = @log.Logger::new()
logger.add_handler(
@log.make_handler(fn(e) { audit.log(e) }, fn() { }, fn() { }),
)
logger.log_with(@log.Level::Info, "数据导出", [
("user", "admin"),
("records", "1000"),
])
logger.log_with(@log.Level::Warn, "登录失败", [
("user", "unknown"),
("attempts", "3"),
])
println(" 审计条目: " + audit.entries().length().to_string())
println(
" 警告级别: " +
audit.filter_by_level(@log.Level::Warn).length().to_string(),
)
}
///|
fn level_filtering() -> Unit {
println("[级别过滤]")
let fmt = @log.compact_formatter()
let mem = @log.MemoryHandler::new(@log.Level::Debug, fmt)
let inner = @log.make_handler(fn(e) { mem.log(e) }, fn() { }, fn() { })
let filtered = @log.LevelFilteredHandler::new(
inner,
@log.Level::Warn,
@log.Level::Error,
)
filtered.log(@log.LogEntryBuilder::new(@log.Level::Debug, "调试").build())
filtered.log(@log.LogEntryBuilder::new(@log.Level::Info, "信息").build())
filtered.log(@log.LogEntryBuilder::new(@log.Level::Warn, "警告").build())
filtered.log(@log.LogEntryBuilder::new(@log.Level::Error, "错误").build())
println(" 过滤后: " + mem.count().to_string() + " (期望2)")
}
///|
fn structured_logging() -> Unit {
println("[结构化日志]")
let entry = @log.LogEntryBuilder::new(@log.Level::Info, "用户操作")
.with_module("auth")
.with_field("action", "login")
.with_field("user", "alice")
.with_location("main.mbt", 42)
.build()
println(" 模块: " + entry.module_name())
let masked = @log.mask_field(entry, "user")
let user_val = @log.entry_get_field(masked, "user")
match user_val {
Some(v) => println(" 脱敏user: " + v)
None => ()
}
println(" JSON: " + @log.entry_to_json_string(entry))
}
///|
fn async_logging() -> Unit {
println("[批量日志]")
let fmt = @log.compact_formatter()
let mem = @log.MemoryHandler::new(@log.Level::Debug, fmt)
let inner = @log.make_handler(fn(e) { mem.log(e) }, fn() { }, fn() { })
let batch = @log.AsyncLogger::new(inner, 3)
batch.log(@log.LogEntryBuilder::new(@log.Level::Info, "消息1").build())
batch.log(@log.LogEntryBuilder::new(@log.Level::Info, "消息2").build())
println(" 队列: " + batch.queue_size().to_string() + " (期望2)")
batch.log(@log.LogEntryBuilder::new(@log.Level::Info, "消息3").build())
println(" 队列: " + batch.queue_size().to_string() + " (期望0)")
println(" 已处理: " + mem.count().to_string() + " (期望3)")
}
///|
fn benchmark_demo() -> Unit {
println("[性能基准]")
let r = @log.benchmark("空函数", 100, fn() {
let mut x = 0
x = x + 1
ignore(x)
})
println(@log.benchmark_report(r))
}