Dart 中的日志

在 Fuchsia 上的 Dart 程序通常使用 lib.logging 包来写入日志消息,通过 fuchsia_logger 包来获取和初始化。

请参阅语言无关日志文档来获取更多关于记录和查看日志的信息。

需求

GN 依赖

必要的包可以包含在BUILD.gn中的deps中:

  1. deps = [
  2. "//topaz/public/dart/fuchsia_logger",
  3. ]

fuchsia_logger 包也提供了 Dart 的 lib.logging

请参阅 Dart: 概述以了解关于在 Fuchsia 中构建 Dart 的更多信息。

组件清单依赖

请在组件清单中包含以下内容,以确保您的组件具有记录日志所需的功能:

  • {.cmx}

    1. {
    2. "include": [
    3. "sdk/lib/diagnostics/syslog/client.shard.cmx"
    4. ],
    5. ...
    6. }
  • {.cml}

    1. {
    2. include: [
    3. "sdk/lib/diagnostics/syslog/client.shard.cml"
    4. ],
    5. ...
    6. }

注意:以上仅适用于树内开发。 这在 fxbug.dev/64207 中进行了跟踪。 树外开发人员应该复制下面展示的片段。

  • {.cmx}

    1. {
    2. "sandbox": {
    3. "services": [
    4. "fuchsia.logger.LogSink"
    5. ]
    6. },
    7. ...
    8. }
  • {.cml}

    1. {
    2. use: [
    3. { protocol: "fuchsia.logger.LogSink" },
    4. ],
    5. }

如果 LogSink 连接失败,系统日志库将回退到 stderr

初始化

在您的主函数中,调用 setupLogger() 函数来初始化日志。

  1. import 'package:fuchsia_logger/logger.dart';
  2. main() {
  3. // 如果此处未提供名称,将使用进程名称
  4. setupLogger(name: 'my-component');
  5. }

配置等级

默认情况下,仅打印具有“INFO”严重性或更高级别的消息。 可以通过在 setupLogger() 调用中给出 level 参数来调整严重性级别。

例如:使所有日志消息出现在 fx log 中:

  1. setupLogger(name: 'noisy-component', level: Level.ALL);

记录消息

log 对象是一个 Logger 的实例。

  1. import 'package:fuchsia_logger/logger.dart';
  2. log.finest('quietest'); // 映射到 TRACE
  3. log.finer('also quietest'); // 也映射到 TRACE
  4. log.fine('quiet'); // 映射到 DEBUG
  5. log.info('hello world!'); // 映射到 INFO
  6. log.warning('uhhh'); // 映射到 WARN
  7. log.severe('oh no!'); // 映射到 ERROR
  8. log.shout('this is fatal.'); // 映射到 FATAL(译:致命的错误)

标准流

print 进入标准输出 (stdout)。

有关系统中输入输出流路由的详细信息,请参阅与语言无关的日志记录文档中的 [stdoutstderr]。