10 个版本
0.1.9 | 2024年6月19日 |
---|---|
0.1.8 | 2024年6月19日 |
0.1.5 | 2023年8月19日 |
0.1.4 | 2023年7月22日 |
在 #log-level 中排名 88
每月下载量 6,692
在 4 个 crate 中使用
23KB
379 代码行
logcall
logcall
是一个 Rust 过程宏 crate,旨在自动记录函数调用、它们的输入和输出。此宏通过提供详细的函数执行日志,以最小的样板代码,简化了调试和监控过程。
这是一个与 log-derive
crate 兼容的 async-trait
的重实现。
安装
将 logcall
添加到你的 Cargo.toml
[dependencies]
logcall = "0.1"
用法
导入 logcall
crate 并使用宏注解你的函数
use logcall::logcall;
/// Logs the function call at the default `debug` level.
#[logcall]
fn add(a: i32, b: i32) -> i32 {
a + b
}
/// Logs the function call at the `info` level.
#[logcall("info")]
fn multiply(a: i32, b: i32) -> i32 {
a * b
}
/// Logs `Ok` results at the `info` level and `Err` results at the `error` level.
#[logcall(ok = "info", err = "error")]
fn divide(a: i32, b: i32) -> Result<i32, String> {
if b == 0 {
Err("Division by zero".to_string())
} else {
Ok(a / b)
}
}
/// Logs errors at the `error` level. No log output for `Ok` variant.
#[logcall(err = "error")]
fn divide2(a: usize, b: usize) -> Result<usize, String> {
if b == 0 {
Err("Division by zero".to_string())
} else {
Ok(a / b)
}
}
/// Logs the function call with custom input logging format.
#[logcall(input = "a = {a:?}, ..")]
fn subtract(a: i32, b: i32) -> i32 {
a - b
}
fn main() {
env_logger::builder()
.filter_level(log::LevelFilter::Trace)
.init();
add(2, 3);
multiply(2, 3);
divide(2, 0).ok();
divide2(2, 0).ok();
subtract(3, 2);
}
日志输出
当 main
函数运行时,它初始化记录器并按指定记录每个函数调用
[2024-06-19T15:01:23Z DEBUG main] main::add(a = 2, b = 3) => 5
[2024-06-19T15:01:23Z INFO main] main::multiply(a = 2, b = 3) => 6
[2024-06-19T15:01:23Z ERROR main] main::divide(a = 2, b = 0) => Err("Division by zero")
[2024-06-19T15:01:23Z ERROR main] main::divide2(a = 2, b = 0) => Err("Division by zero")
[2024-06-19T15:01:23Z DEBUG main] main::subtract(a = 3, ..) => 1
自定义
- 默认日志级别:如果没有指定日志级别,
logcall
将在debug
级别记录#[logcall]
- 指定日志级别:使用宏参数指定日志级别
#[logcall("info")]
- 为
Result
指定日志级别:使用ok
和err
参数为Ok
和Err
变体指定日志级别#[logcall(err = "error")] #[logcall(ok = "info", err = "error")]
- 自定义输入日志:使用
input
参数自定义输入日志格式#[logcall(input = "a = {a:?}, ..")] #[logcall("info", input = "a = {a:?}, ..")] #[logcall(ok = "info", err = "error", input = "a = {a:?}, ..")]
贡献
欢迎贡献!请提交拉取请求或打开问题来改进 crate。
许可协议
此项目采用 MIT 许可协议。
依赖项
~1.5MB
~37K SLoC