10个版本
0.2.0 | 2023年6月21日 |
---|---|
0.1.4 | 2023年6月3日 |
0.1.3 | 2023年5月6日 |
0.1.2 | 2023年4月9日 |
0.0.4 | 2023年4月7日 |
#401 在 调试 中
每月 68 次下载
180KB
792 行
🪓 木材加工厂
简单的结构化日志。
使用方法
use lumbermill::{info, Logger}
fn main() {
// Initialize the logger early
Logger::default().init();
// Log a single line
info!("Incoming connection from {:?} {}", addr, port);
// Attach key-value pairs with the log message
info!(addr.ip = ip, addr.port = port, "Listening on {}", port);
// Or use the shorthand if the key's name is the same as the variable:
info!(addr.ip, port, "Listening on {}", port);
// Attach key-value pairs with the log message, formatting them using their
// `Debug` trait (useful when variables do not implement `Display`)
info!(addr.ip = ?ip, addr.port = port, "Listening on {}", port);
// Or in the shorthand notation:
info!(?addr.ip, port, "Listening on {}", port);
}
trace!
、debug!
、info!
、warn!
、error!
和 fatal!
严重受到 tracing
宏的启发,因为它们很棒。
默认日志记录器仅将格式化的日志打印到 stdout
,但您可以将 Logger
配置为以不同的方式执行
use lumbermill::{LogFormat, LogLevel, RollInterval};
Logger::builder()
.format(LogFormat::Compact) // Set the format of logs
.level(LogLevel::Info) // Set the minimum log level
.stdout(false) // Stop printing to stdout
.file("./logs", RollInterval::Daily) // Log to a directory; one file per day
// Shorthands
.pretty() // .format(LogFormat::Pretty)
.compact() // .format(LogFormat::Compact)
.pretty_structured() // .format(LogFormat::PrettyStructured)
.json() // .format(LogFormat::Json)
// Remember to call `init` after configuration!
.init();
您可以使用 #![cfg]
宏在不同的场景中拥有不同的活动配置
// Pretty logs on stdout during development
#[cfg(debug_assertions)]
Logger::default().level(LogLevel::Trace).pretty().init();
// Compact logs on rolling files in production
#[cfg(not(debug_assertions))]
{
let dir = "./logs";
std::fs::create_dir_all(dir)?;
Logger::default()
.level(LogLevel::Info)
.compact()
.file(dir, lumbermill::RollInterval::Hourly)
.init();
}
示例
示例 是了解库的好起点。这样运行它们
$ cargo run --example 01-defaults # Or replace this wil a different example's name
文档 通常在您熟悉了事物后会更详细。
为什么?
tracing
生态系统很棒,但它对于只需要结构化日志而不需要分布式跟踪解决方案的许多应用程序来说却是过度的。 log
包是明显的替代品,但它的 kv
模块仍在开发中。您也无法以不方便的方式记录不实现 Display
的键值对。
这个包是一个临时解决方案,直到 log::kv
稳定。它将 tracing
的出色 event!
宏与 log
的简单性相结合。计划是最终删除这个包中的自定义宏,并直接与 log
集成。
MSRV
这个包目前至少需要 Rust 1.70
致谢
依赖项
~1.2–6MB
~27K SLoC