rlg — RustLogs
Near-lock-free structured logging for Rust, plus an ecosystem of companion crates: CLI tooling, MCP server, OTLP exporter, tower middleware, WebAssembly bindings, PII redaction, test utilities, and aggregation reports.
This is the Cargo workspace root. The library lives atcrates/rlg. Ten companion crates ship from thisworkspace, all at lockstep version 0.0.11.
The rlg ecosystem
| Crate | What it does | Use case |
|---|---|---|
rlg |
Near-lock-free structured logging engine. 65k-slot ring buffer, deferred formatting, 14 output formats, native OS sinks (os_log via syslog(3), journald). |
Embed structured logging in any Rust binary or library. |
rlg-cli |
rlg binary — jq for structured logs. Tail, filter, convert across all 14 formats. |
Pipe my-service | rlg --min-level error --format ecs from the shell. |
rlg-mcp |
Model Context Protocol server exposing rlg streams as tools to LLM agents. | Claude Desktop, Cursor, mcp.run agents reading your logs. |
rlg-otlp |
OpenTelemetry network exporter (OTLP/HTTP JSON). | Ship records to Honeycomb, Datadog, Tempo, Jaeger, otelcol. |
rlg-tower |
tower::Layer emitting per-request structured access logs. |
axum, tonic, hyper, lambda_runtime — any tower::Service. |
rlg-wasm |
wasm-bindgen wrapper for browser / Deno / Cloudflare Workers / Bun, plus a WASI 0.2 component interface for wasmtime hosts. |
Structured logging from JS or WASI 0.2 components. |
rlg-redact |
PII / secret redaction between Log::fire() and the sink. Aho-Corasick fused alternation regex. |
Compliance, GDPR, audit-trail safety. Built-in patterns for cards, JWTs, bearers, emails, IPs, AWS keys. |
rlg-test |
Test utilities — capture rlg records in a #[test] scope and assert on them with assert_logged!. |
Downstream library tests verifying their structured log output. |
rlg-report |
Log digest / analytics: count by level, top components, top errors, latency percentiles. CLI + library mode. | Operational dashboards, daily error reports, oncall triage. |
rlg-ebpf |
Enricher trait + ProcessEnricher (portable) + EbpfEnricher scaffold (Linux, behind the ebpf feature) for automatic PID / process-name attributes. |
Automatic host-level context on every record without app code changes. |
xtask (internal, unpublished) |
cargo xtask check-all / coverage / audit / doc / examples / bench / release. |
Maintainer automation. |
Install one, install all
[dependencies]
rlg = "0.0.11"
rlg-otlp = "0.0.11" # ship to an OTLP collector
rlg-tower = "0.0.11" # HTTP middleware
rlg-redact = "0.0.11" # PII redaction
[dev-dependencies]
rlg-test = "0.0.11" # assertions in your tests
CLI binaries:
cargo install rlg-cli # the `rlg` binary
cargo install rlg-mcp # the `rlg-mcp` MCP server
cargo install rlg-report # the `rlg-report` digest tool
Workspace layout
.
├── Cargo.toml # workspace manifest (profiles, members)
├── README.md # ← you are here
├── CHANGELOG.md / CONTRIBUTING.md / SECURITY.md
├── LICENSE-{APACHE,MIT}
├── crates/
│ ├── rlg/ # core library
│ ├── rlg-cli/ # `rlg` binary + filter/render lib
│ ├── rlg-mcp/ # MCP server
│ ├── rlg-otlp/ # OTLP/HTTP exporter
│ ├── rlg-tower/ # tower::Layer
│ ├── rlg-wasm/ # wasm-bindgen + WASI 0.2 component
│ ├── rlg-redact/ # PII / secret scrubber (Aho-Corasick)
│ ├── rlg-test/ # test utilities
│ ├── rlg-report/ # log digest binary + lib
│ ├── rlg-ebpf/ # Enricher trait + eBPF (Linux) scaffold
│ └── xtask/ # internal automation (publish = false)
└── .github/
└── workflows/
├── ci.yml # delegates to sebastienrousseau/pipelines
└── release.yml # workspace-aware crates.io publisher
Quick links
- Core docs:
crates/rlg/README.md· docs.rs/rlg - Contributing & signing policy:
CONTRIBUTING.md - Security policy:
SECURITY.md - Release notes:
CHANGELOG.md
License
Dual-licensed under Apache 2.0 or MIT, at your option.