mirror of
https://github.com/Nanaloveyuki/BitLogger.git
synced 2026-07-29 22:16:34 +00:00
✨ add wasm coverage and trace context
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
# BitLogger Benchmarks
|
||||
|
||||
Run the native baseline from the repository root:
|
||||
|
||||
```powershell
|
||||
moon bench benchmarks --target native --release --deny-warn
|
||||
```
|
||||
|
||||
The suite measures callback emission, trace-context field binding, synchronous queue enqueue-and-flush, and native file writes. It intentionally has no pass/fail threshold: compare results only on the same machine, toolchain, target, and power profile.
|
||||
|
||||
Async throughput remains lifecycle-sensitive and is exercised by the native integration test rather than mixed into these synchronous microbenchmarks. Record its end-to-end measurements separately when profiling an application workload.
|
||||
@@ -0,0 +1,61 @@
|
||||
///|
|
||||
let benchmark_record : @log.Record = @log.Record::new(
|
||||
@log.Level::Info,
|
||||
"benchmark record",
|
||||
target="bench",
|
||||
fields=[@log.field("component", "bitlogger")],
|
||||
)
|
||||
|
||||
///|
|
||||
test "bench callback logger emission" (it : @bench.T) {
|
||||
let writes : Ref[Int] = Ref(0)
|
||||
let logger = @log.Logger::new(@log.callback_sink(fn(_) { writes.val += 1 }))
|
||||
it.bench(fn() {
|
||||
logger.info("benchmark record", fields=[
|
||||
@log.field("component", "bitlogger"),
|
||||
])
|
||||
it.keep(writes.val)
|
||||
})
|
||||
}
|
||||
|
||||
///|
|
||||
test "bench trace context field binding" (it : @bench.T) {
|
||||
let writes : Ref[Int] = Ref(0)
|
||||
let context = @log.trace_context("trace-bench", "span-bench")
|
||||
let logger = @log.Logger::new(@log.callback_sink(fn(_) { writes.val += 1 })).with_trace_context(
|
||||
context,
|
||||
)
|
||||
it.bench(fn() {
|
||||
logger.info("benchmark record", fields=[@log.field("event", "request")])
|
||||
it.keep(writes.val)
|
||||
})
|
||||
}
|
||||
|
||||
///|
|
||||
test "bench queued logger enqueue and flush" (it : @bench.T) {
|
||||
let writes : Ref[Int] = Ref(0)
|
||||
let logger = @log.Logger::new(@log.callback_sink(fn(_) { writes.val += 1 })).with_queue(
|
||||
max_pending=8,
|
||||
)
|
||||
it.bench(fn() {
|
||||
logger.info("benchmark record")
|
||||
it.keep(logger.sink.flush())
|
||||
})
|
||||
}
|
||||
|
||||
///|
|
||||
test "bench native file sink write" (it : @bench.T) {
|
||||
let sink = @log.file_sink(
|
||||
"logs/bitlogger-benchmark.log",
|
||||
append=false,
|
||||
auto_flush=false,
|
||||
formatter=fn(rec) { rec.message },
|
||||
)
|
||||
if sink.is_available() {
|
||||
it.bench(fn() {
|
||||
sink.write(benchmark_record)
|
||||
it.keep(sink.write_failures())
|
||||
})
|
||||
ignore(sink.close())
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
import {
|
||||
"Nanaloveyuki/BitLogger/src" @log,
|
||||
"moonbitlang/core/bench",
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
// Generated using `moon info`, DON'T EDIT IT
|
||||
package "Nanaloveyuki/BitLogger/benchmarks"
|
||||
|
||||
// Values
|
||||
|
||||
// Errors
|
||||
|
||||
// Types and methods
|
||||
|
||||
// Type aliases
|
||||
|
||||
// Traits
|
||||
Reference in New Issue
Block a user