| Crates.io | sheen |
| lib.rs | sheen |
| version | 0.2.0 |
| created_at | 2026-01-22 22:21:52.62001+00 |
| updated_at | 2026-01-23 02:24:30.795807+00 |
| description | A polished, colorful logging library for Rust |
| homepage | |
| repository | https://github.com/arferreira/sheen |
| max_upload_size | |
| id | 2062791 |
| size | 272,781 |
A polished, colorful logging library for Rust ✨

[dependencies]
sheen = "0.2"
fn main() {
sheen::init();
sheen::info!("Server started", port = 3000);
sheen::debug!("Loading config");
sheen::warn!("Cache miss", key = "user_123");
sheen::error!("Connection failed", attempts = 3);
}
Output:
14:32:15 INFO Server started port=3000
14:32:15 WARN Cache miss key="user_123"
14:32:15 ERROR Connection failed attempts=3
use sheen::{Logger, Level};
fn main() {
sheen::init_with(
Logger::new()
.level(Level::Trace)
.prefix("myapp")
.timestamp(true)
);
sheen::trace!("verbose output");
sheen::info!("ready");
}
Create loggers with persistent fields using .with():
use sheen::{Logger, Level};
let logger = Logger::new().level(Level::Debug);
let req_log = logger.with(&[("request_id", &"abc123")]);
req_log.info("started", &[]);
req_log.info("db query", &[("table", &"users")]);
req_log.info("completed", &[("status", &200)]);
Output:
14:32:15 INFO started request_id="abc123"
14:32:15 INFO db query request_id="abc123" table="users"
14:32:15 INFO completed request_id="abc123" status=200
Colorful, human-readable output:
let logger = Logger::new();
logger.info("hello", &[("port", &3000)]);
// 14:32:15 INFO hello port=3000
Structured output for log aggregators:
use sheen::{Logger, JsonFormatter};
let logger = Logger::new().formatter(JsonFormatter);
logger.info("hello", &[("port", &3000)]);
// {"level":"info","msg":"hello","time":"14:32:15","port":3000}
Key=value format for Heroku, Splunk, etc:
use sheen::{Logger, LogfmtFormatter};
let logger = Logger::new().formatter(LogfmtFormatter);
logger.info("hello", &[("port", &3000)]);
// level=info msg="hello" time="14:32:15" port=3000
Colors are automatically disabled when output is piped:
# Colors enabled
cargo run
# Colors disabled (piped to file)
cargo run 2> logs.txt
Force colors on or off:
let logger = Logger::new().colorize(false);
MIT