📝 Polish onboarding and add feature examples

This commit is contained in:
Nanaloveyuki
2026-05-20 11:40:23 +08:00
parent 5f12991592
commit e019db11d6
16 changed files with 244 additions and 22 deletions
+17 -10
View File
@@ -1,8 +1,25 @@
fn main {
let preset_logger = @lib.build_logger(
@lib.with_queue(
@lib.text_console(
min_level=@lib.Level::Info,
target="preset",
text_formatter=@lib.TextFormatterConfig::new(show_timestamp=false, separator=" | "),
),
max_pending=2,
overflow=@lib.QueueOverflowPolicy::DropOldest,
),
)
preset_logger.info("queued one")
preset_logger.info("queued two")
preset_logger.info("queued three")
ignore(preset_logger.flush())
@lib.set_default_min_level(@lib.Level::Debug)
@lib.set_default_target("bitlogger")
@lib.info("hello from BitLogger", fields=[@lib.field("mode", "demo")])
// Direct Logger::new(...) composition stays useful for custom sink graphs.
let logger = @lib.Logger::new(@lib.console_sink(), min_level=@lib.Level::Trace, target="custom")
.with_context_fields([@lib.field("service", "bitlogger")])
logger.debug("custom logger ready", fields=[@lib.field("sink", "console")])
@@ -136,16 +153,6 @@ fn main {
]))
patched_logger.info("login", fields=[@lib.field("user", "alice"), @lib.field("token", "secret")])
let queued_logger = @lib.Logger::new(
@lib.console_sink(),
min_level=@lib.Level::Info,
target="queue",
).with_queue(max_pending=2, overflow=@lib.QueueOverflowPolicy::DropOldest)
queued_logger.info("queued one")
queued_logger.info("queued two")
queued_logger.info("queued three")
ignore(queued_logger.sink.flush())
let config_logger = @lib.parse_and_build_logger(
"{\"min_level\":\"debug\",\"target\":\"config.demo\",\"timestamp\":true,\"sink\":{\"kind\":\"text_console\",\"text_formatter\":{\"show_timestamp\":false,\"field_separator\":\",\",\"template\":\"[{level}] {target} {message} :: {fields}\"}},\"queue\":{\"max_pending\":2,\"overflow\":\"DropOldest\"}}",
) catch {
+17
View File
@@ -0,0 +1,17 @@
fn main {
let config = @lib.parse_logger_config_text(
"{\"min_level\":\"debug\",\"target\":\"demo.config\",\"sink\":{\"kind\":\"text_console\",\"text_formatter\":{\"show_timestamp\":false,\"separator\":\" | \",\"template\":\"[{level}] {target} {message}\"}},\"queue\":{\"max_pending\":2,\"overflow\":\"DropOldest\"}}",
) catch {
err => {
ignore(err)
println("invalid config")
return
}
}
let logger = @lib.build_logger(config)
logger.info("queued one")
logger.info("queued two")
logger.info("queued three")
ignore(logger.flush())
}
+7
View File
@@ -0,0 +1,7 @@
import {
"Nanaloveyuki/BitLogger/src" @lib,
}
options(
"is-main": true,
)
+8
View File
@@ -0,0 +1,8 @@
fn main {
let logger = @lib.Logger::new(@lib.console_sink(), min_level=@lib.Level::Info, target="demo.console")
.with_context_fields([@lib.field("service", "bitlogger")])
logger.info("hello console", fields=[@lib.field("mode", "basic")])
let structured = @lib.Logger::new(@lib.json_console_sink(), min_level=@lib.Level::Info, target="demo.json")
structured.info("hello json", fields=[@lib.field("kind", "structured")])
}
+7
View File
@@ -0,0 +1,7 @@
import {
"Nanaloveyuki/BitLogger/src" @lib,
}
options(
"is-main": true,
)
+19
View File
@@ -0,0 +1,19 @@
fn main {
if !@lib.native_files_supported() {
println("native file sink is not available on this backend")
return
}
let logger = @lib.Logger::new(
@lib.file_sink(
"bitlogger-example.log",
auto_flush=true,
rotation=Some(@lib.file_rotation(128, max_backups=2)),
),
min_level=@lib.Level::Info,
target="demo.file",
)
logger.info("file rotation ready", fields=[@lib.field("kind", "file")])
ignore(logger.sink.flush())
ignore(logger.sink.close())
}
+7
View File
@@ -0,0 +1,7 @@
import {
"Nanaloveyuki/BitLogger/src" @lib,
}
options(
"is-main": true,
)
+27
View File
@@ -0,0 +1,27 @@
fn main {
let config = @lib.with_queue(
@lib.with_file_rotation(
@lib.file(
"preset-example.log",
min_level=@lib.Level::Info,
target="demo.preset",
auto_flush=true,
),
256,
max_backups=2,
),
max_pending=4,
overflow=@lib.QueueOverflowPolicy::DropOldest,
) catch {
err => {
ignore(err)
println("invalid preset config")
return
}
}
let logger = @lib.build_logger(config)
logger.info("preset logger ready", fields=[@lib.field("kind", "preset")])
ignore(logger.flush())
ignore(logger.file_close())
}
+7
View File
@@ -0,0 +1,7 @@
import {
"Nanaloveyuki/BitLogger/src" @lib,
}
options(
"is-main": true,
)
+16
View File
@@ -0,0 +1,16 @@
fn main {
let formatter = @lib.text_formatter(
show_timestamp=false,
color_mode=@lib.ColorMode::Always,
).with_style_tags(
@lib.default_style_tag_registry()
.set_tag("accent", fg=Some("#4cc9f0"), bold=true)
.define_alias("danger", "red"),
)
let logger = @lib.Logger::new(
@lib.text_console_sink(formatter),
min_level=@lib.Level::Info,
target="demo.style",
)
logger.info("<accent>styled</> output with <danger>alert</>")
}
+7
View File
@@ -0,0 +1,7 @@
import {
"Nanaloveyuki/BitLogger/src" @lib,
}
options(
"is-main": true,
)
+14
View File
@@ -0,0 +1,14 @@
fn main {
let formatter = @lib.text_formatter(
show_timestamp=false,
separator=" | ",
field_separator=",",
template="[{level}] {target} {message} :: {fields}",
)
let logger = @lib.Logger::new(
@lib.text_console_sink(formatter),
min_level=@lib.Level::Info,
target="demo.formatter",
)
logger.info("formatted output", fields=[@lib.field("user", "alice"), @lib.field("request_id", "42")])
}
+7
View File
@@ -0,0 +1,7 @@
import {
"Nanaloveyuki/BitLogger/src" @lib,
}
options(
"is-main": true,
)