📝 align portable examples and release messaging

This commit is contained in:
Nanaloveyuki
2026-05-21 14:12:56 +08:00
parent d4f83f5ccb
commit 3e8d4c50a9
9 changed files with 135 additions and 74 deletions
+1
View File
@@ -1,4 +1,5 @@
async fn main {
println("examples/async_basic is shipped as a native-only example because async fn main entry support is still limited on non-native targets, even though src-async itself keeps compatibility behavior.")
println(@lib_async.stringify_async_runtime_state(@lib_async.async_runtime_state(), pretty=true))
let raw = "{\"logger\":{\"min_level\":\"info\",\"target\":\"async.demo\",\"timestamp\":true,\"sink\":{\"kind\":\"text_console\",\"text_formatter\":{\"show_timestamp\":false,\"separator\":\" | \"}}},\"async_config\":{\"max_pending\":2,\"overflow\":\"DropOldest\",\"max_batch\":4,\"linger_ms\":5,\"flush\":\"Batch\"}}"
+6 -3
View File
@@ -1,8 +1,11 @@
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")])
let logger = @lib.build_logger(
@lib.console(min_level=@lib.Level::Info, target="demo.console"),
)
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")
let structured = @lib.build_logger(
@lib.json_console(min_level=@lib.Level::Info, target="demo.json"),
)
structured.info("hello json", fields=[@lib.field("kind", "structured")])
}
+19 -10
View File
@@ -1,19 +1,28 @@
fn main {
if !@lib.native_files_supported() {
println("native file sink is not available on this backend")
println("native file sink is not available on this backend; examples/presets stays portable, while file_rotation remains native-focused")
return
}
let logger = @lib.Logger::new(
@lib.file_sink(
"bitlogger-example.log",
auto_flush=true,
rotation=Some(@lib.file_rotation(128, max_backups=2)),
let logger = @lib.build_logger(
@lib.with_file_rotation(
@lib.file(
"bitlogger-example.log",
min_level=@lib.Level::Info,
target="demo.file",
auto_flush=true,
) catch {
err => {
ignore(err)
println("invalid file preset config")
return
}
},
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())
ignore(logger.flush())
ignore(logger.file_close())
}
+33 -15
View File
@@ -1,27 +1,45 @@
fn main {
let config = @lib.with_queue(
@lib.with_file_rotation(
@lib.text_console(
min_level=@lib.Level::Info,
target="demo.preset",
text_formatter=@lib.TextFormatterConfig::new(
show_timestamp=false,
separator=" | ",
),
),
max_pending=4,
overflow=@lib.QueueOverflowPolicy::DropOldest,
)
let logger = @lib.build_logger(config)
logger.info("preset logger ready", fields=[@lib.field("kind", "portable")])
logger.info("preset logger queued", fields=[@lib.field("step", "two")])
ignore(logger.flush())
if @lib.native_files_supported() {
let file_config = @lib.with_file_rotation(
@lib.file(
"preset-example.log",
min_level=@lib.Level::Info,
target="demo.preset",
target="demo.preset.file",
auto_flush=true,
),
256,
max_backups=2,
),
max_pending=4,
overflow=@lib.QueueOverflowPolicy::DropOldest,
) catch {
err => {
ignore(err)
println("invalid preset config")
return
) catch {
err => {
ignore(err)
println("invalid file 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())
let file_logger = @lib.build_logger(file_config)
file_logger.info("file preset ready", fields=[@lib.field("kind", "native-only")])
ignore(file_logger.flush())
ignore(file_logger.file_close())
} else {
println("file presets are skipped on this backend because native file support is unavailable")
}
}
+12 -12
View File
@@ -1,16 +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",
let logger = @lib.build_logger(
@lib.text_console(
min_level=@lib.Level::Info,
target="demo.style",
text_formatter=@lib.TextFormatterConfig::new(
show_timestamp=false,
color_mode=@lib.ColorMode::Always,
style_tags={
"accent": @lib.text_style(fg=Some("#4cc9f0"), bold=true),
},
),
),
)
logger.info("<accent>styled</> output with <danger>alert</>")
}
+11 -10
View File
@@ -1,14 +1,15 @@
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",
let logger = @lib.build_logger(
@lib.text_console(
min_level=@lib.Level::Info,
target="demo.formatter",
text_formatter=@lib.TextFormatterConfig::new(
show_timestamp=false,
separator=" | ",
field_separator=",",
template="[{level}] {target} {message} :: {fields}",
),
),
)
logger.info("formatted output", fields=[@lib.field("user", "alice"), @lib.field("request_id", "42")])
}