acta
A customizable logging library for Rust
Installation
The default feature set enables Unicode console output and file logging.
Quick start
use ;
Keep the returned guard alive for as long as logging is needed. Dropping it stops file logging.
Features
| Feature | Enabled by default | Description |
|---|---|---|
unicode |
Yes | Uses the Unicode icon set unless nerd selects Nerd Font icons. |
file |
Yes | Enables init_tracing, TracingGuard, build_file_layer, and file logging through tracing-appender. |
compress |
No | Enables LogRotation::Compress for gzip-compressing old log files. |
serde |
No | Adds Serialize / Deserialize support for config types. |
nerd |
No | Enables Nerd Font icons through Icons::nerd() and uses them by default. |
custom-async |
No | Enables Tokio-backed async console writers and exports AsyncWriter helpers. |
native-async |
No | Enables non-blocking console writers backed by tracing-appender. |
async |
No | Enables both custom-async and native-async. |
If you disable default features, init_tracing is unavailable unless the file feature is enabled.
Configuration
LoggingConfig::default() uses:
- Level:
LogLevel::Info - Console: enabled with
LogFormat::Compact - Console writer:
ConsoleWriter::Stdout - ANSI colors: enabled
- Path and span display: enabled
- File logging: disabled
use ;
Console formats
| Format | Description |
|---|---|
LogFormat::Compact |
Default themed formatter with optional path and span display. |
LogFormat::Pretty |
tracing-subscriber pretty formatter with file and line metadata. |
LogFormat::Json |
Flattened JSON events without ANSI colors. |
File logging
File logging is available with the file feature, which is enabled by default. File logs are written as flattened JSON
events.
use ;
use PathBuf;
Supported rotation modes:
| Mode | Description |
|---|---|
LogRotation::None |
Keeps the existing log file. |
LogRotation::Rename |
Renames the existing log file with a timestamp before opening a new one. |
LogRotation::Compress |
Compresses the existing log file to gzip before opening a new one. Requires compress. |
acta uses tracing-subscriber EnvFilter directive syntax for startup filters and runtime reloads.
use ;
let config = LoggingConfig ;
You can change filters after initialization through ReloadHandle.
use ;
RUST_LOG is not read automatically. If you want to use it, pass its value into LogLevel::Custom.
use ;
let directive = var.unwrap_or_else;
let config = LoggingConfig ;
Custom formatter
AnsiFormatter powers LogFormat::Compact and can be customized through builder methods.
use ;
let formatter = new
.with_theme
.with_icons
.with_labels
.with_time_format
.with_path_width
.with_show_path
.with_show_spans;
The default path width is generated at build time. Override it per formatter with AnsiFormatter::with_path_width.
Themes
| Theme | Description |
|---|---|
Theme::trans_flag() |
Default |
Theme::monokai() |
Monokai |
Theme::dracula() |
Dracula |
Theme::nord() |
Nord |
Theme::catppuccin_mocha() |
Catppuccin Mocha |
Theme::gruvbox() |
Gruvbox |
Theme::one_dark() |
One Dark |
Theme::tokyo_night() |
Tokyo Night |
Icons and labels
use ;
let unicode_icons = unicode;
let short_labels = short;
let long_labels = long;
With the nerd feature enabled:
use Icons;
let nerd_icons = nerd;
Runtime style reload
ReloadHandle can reload themes, icons, and labels only when it is created with a shared StyleConfig. init_tracing
configures runtime filter reloads, but not runtime style reloads.
For style reloads, build the subscriber manually:
use ;
use *;
This low-level setup requires adding tracing-subscriber as a direct dependency.
Async console writers
With custom-async, native-async, or async, ConsoleWriter gains async stdout and stderr variants.
AsyncWriterMode::Custom uses Tokio, so your application must run inside a Tokio runtime. If you use #[tokio::main],
add Tokio as a direct dependency with the required runtime and macro features.
use ;
async
AsyncWriterMode::Native uses tracing-appender non-blocking writers.