登录 Rust

本文档介绍了如何开始在 Fuchsia 上对 Rust 程序进行日志记录。如需了解有关记录和查看日志的一般信息,请参阅不限语言的日志记录文档

所需功能

在组件清单中添加以下内容,确保您的组件请求适当的日志记录功能:

{
  include: [
    "syslog/client.shard.cml"
  ],
  ...
}

初始化

您必须先初始化日志记录,然后才能从 Rust 代码记录日志。初始化由 fuchsia crate 设置宏处理。

GN 依赖项

将以下 deps 添加到 BUILD.gn 文件中:

deps = [
  "//src/lib/fuchsia",
]

设置

在 Rust 源文件中,对于使用 fuchsia::mainfuchsia::test 宏初始化的任何函数,系统会默认启用日志记录:

#[fuchsia::main]
fn main() {
    // ...
}

#[fuchsia::test]
fn example_test() {
    // ...
}

您还可以传递 logging 标志以明确说明这一点:

#[fuchsia::main(logging = true)]
fn main() {
    // ...
}

#[fuchsia::test(logging = true)]
fn example_test() {
    // ...
}

添加标签

日志消息可以包含一个或多个标记,以提供更多上下文。如需为给定作用域启用日志标记,请在初始化期间传递 logging_tags 参数:

#[fuchsia::main(logging_tags = ["foo", "bar"])]
fn main() {
    // ...
}

#[fuchsia::test(logging_tags = ["foo", "bar"])]
fn example_test_with_tags() {
    // ...
}

记录日志

Fuchsia 上的 Rust 程序通常使用 log crate 宏来记录日志。

GN 依赖项

log crate 添加到 BUILD.gn 文件的 deps 条目中:

deps = [
  "//third_party/rust_crates:log",
]

日志事件

调用 log crate 提供的宏,以在声明的严重级别记录日志:

fn main() {
    log::trace!("something happened: {}", 5); // maps to TRACE
    log::debug!("something happened: {}", 4); // maps to DEBUG
    log::info!("something happened: {}", 3);  // maps to INFO
    log::warn!("something happened: {}", 2);  // maps to WARN
    log::error!("something happened: {}", 1); // maps to ERROR

    # You can also use the log crate to emit structured logs.
    log::info!(my_key = 3, other_key_debug:?; "something happened");
}

标准串流

Rust 宏(例如 println!eprintln! 等)会映射到标准输出 (stdout) 和标准错误 (stderr)。使用这些流可能需要为您的程序执行额外的设置工作。

如需了解详情,请参阅不依赖于语言的日志记录文档中的标准流部分。