#打印 #属性 #日志 #打印 #调试 #显示 #转储

simple_function_logger

简单函数日志记录器

5个版本

0.1.4 2023年5月19日
0.1.3 2023年5月18日
0.1.2 2023年5月16日
0.1.1 2023年5月12日
0.1.0 2023年5月12日

#654过程宏

Download history 48/week @ 2024-03-15 2/week @ 2024-03-29

每月 52 次下载

MIT 许可协议

23KB
447

printer 属性在调用函数时打印函数名称。

属性选项(以逗号分隔)

#[printer($a, ?$b, $3, test, prefix = "ABC ", suffix = " DEF")]
fn foo(a: u32, b: u32, c: u32) -> u32 {
    a + b + c
}

它将 #[cfg(test)] println!("ABC foo(a: {a}, b: {b:?}, c: {c}) DEF"); 放置在 foo 的第一行。 $a 表示它应该使用 Display 特性来打印 a 的值。 ??$b 处表示它使用 Debug 特性而不是 Display$3 指向第三个参数,即 c。如果您想简单地打印所有参数,请编写 all?all

test 添加了 #[cfg(test)]。有 3 个配置文件可供选择:testdebugrelease。如果没有指定配置文件,它将在所有配置文件上运行。也可以指定多个配置文件:#[printer(test, debug)] 将在展开结果中添加 #[cfg(all(test, debug_assertions))]

不要在后缀和前缀中使用大括号。

如果没有提供任何选项(#[printer]),则相当于 #[printer(?all)]

#[printer(dump)]
fn foo() {}

dump 选项在编译时将展开的宏输出到 stdout。它仅在编译时显示输出,而不是在运行时。这意味着您必须在 cargo build 后读取 stdout,而不是 cargo run。只有当它被重新编译时,cargo run 才会工作。

#[printer(name = "foo")]
fn bar() {}

它使用名称 foo 而不是 bar

#[printer(eprintln)]
fn bar() {}

它使用 eprintln 而不是 println。还有 printeprint

#[printer(cfg = "baz")]
fn foo() {}

只有当 #[cfg(feature = "baz")] 时才会工作。您可以将其与 test、debug 和 release 混合使用。最多可以使用一个标志。

#[printer($a, cond(a > 3))]
fn foo(a: u32) -> u32 { a + 1 }

只有当 a > 3 时才会工作。它使用 if 语句包装打印宏。

无运行时依赖