twyg
A tiny logging setup for Rust applications
I got used to logging my apps in with:
so here's something similar for Rust ;-)
Version warnings:
- v0.4 - Due to the more complex nature of
OwoColors, a major code refactor was required to fix the colour regression of v0.3, and as part of that several breaking changes were introduced, including astructraname, new fields, etc. - v0.3 - A regression was introduced due to the move away from the unsupported (and insecure)
colorslibrary whereby one could no longer disable ANSI colour of logged output.
Usage
First, update your Cargo.tomls dependencies section:
[]
= "0.5"
I like to put my logging setup in YAML config files for my apps, but however
you prefer to store your config, you'll next need to create a twyg::Opts
using the builder pattern:
use ;
let opts = new
.coloured
.level
.report_caller
.build
.unwrap;
match setup ;
The supported options are:
coloured: setting to false will disable ANIS colours in the logging outputfile: provide a path to a file, and output will be logged there toolevel: case-insensitive logging levelreport_caller: setting to true will output the filename and line number where the logging call was made
Once the setup function has been called, all subsequent calls to the standard Rust logging macros will use this setup, providing output like the following:
The output in the screenshot above (click for a full-sized view) is from
running the demos in the examples directory.
Config
Use with the config library is seamless thanks to serde support:
-
Set up some YAML:
logging: coloured: true level: debug output: stdout report_caller: true time_format: "%Y-%m-%d %H:%M:%S" -
Add an entry to your config struct:
use Deserialize; -
Create a constructor for
YourAppConfig(see config library docs and examples) -
Build your config:
let cfg = default.unwrap; -
Pass the logging config to twyg:
match setup ;
Note: The Opts struct uses lowercase serialization for enums ("debug", "info", etc.),
so your YAML/JSON config files should use lowercase strings for level and output fields.
Migration Guide
Upgrading from v0.4 to v0.5
v0.5 introduces type-safe enums and a builder pattern for better API ergonomics. Here's how to migrate:
1. Replace stringly-typed level functions with LogLevel enum
Before (v0.4):
use ;
let opts = Opts ;
After (v0.5):
use ;
let opts = new
.level
.build
.unwrap;
2. Replace stringly-typed output with Output enum
Before (v0.4):
use ;
let opts = Opts ;
After (v0.5):
use ;
let opts = new
.output
.build
.unwrap;
3. Use OptsBuilder instead of struct literals
Before (v0.4):
let opts = Opts ;
After (v0.5):
let opts = new
.coloured
.level
.report_caller
.build
.unwrap;
4. Error handling now uses custom TwygError
Before (v0.4):
match setup
After (v0.5):
match setup
Backwards Compatibility
The old stringly-typed functions are still available but deprecated:
level::debug(),level::info(), etc. → UseLogLevel::Debug,LogLevel::Infoout::stdout(),out::stderr()→ UseOutput::Stdout,Output::Stderr
License
Copyright © 2020-2026, Oxur Group
Apache License, Version 2.0
