Go 语言中的 Logging

Fuchsia 上的 Go 程序通常使用 syslog package 及其中的 syslog.Infof() 函数。

有关记录和查看日志的更多信息,请参阅 语言无关的日志文档 <!—

Requirements

GN dependencies

The necessary packages can be included with an addition to deps in BUILD.gn:

  1. deps = [
  2. "//src/lib/component",
  3. "//src/lib/syslog/go",
  4. ]

See Go: Overview for more information about building Go within Fuchsia. —>

Requirements

GN 依赖

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

  1. deps = [
  2. "//src/lib/component",
  3. "//src/lib/syslog/go",
  4. ]

有关在 Fuchsia 中构建 Go 的更多信息,请参阅 Go: Overview

组件依赖清单

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

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

注意:以上仅适用于 in-tree 开发。 这在 fxbug.dev/64207 中进行了跟踪。 Out of tree 开发人员应该复制下面所述片段。

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

如果 LogSink 连接失败,syslog 库将回退到 stderr

初始化

初始化时如果没有任何 tag 的话,将默认使用进程名称。

  1. import (
  2. "go.fuchsia.dev/fuchsia/src/lib/component"
  3. syslog "go.fuchsia.dev/fuchsia/src/lib/syslog/go"
  4. )
  5. func main() {
  6. ctx := component.NewContextFromStartupInfo()
  7. {
  8. // 全局 tag, 最多可传递 4 个 tag. 每条日志消息都标有这些 tag.
  9. l, err := syslog.NewLoggerWithDefaults(ctx.Connector(), "my_tag")
  10. if err != nil {
  11. panic(err)
  12. }
  13. syslog.SetDefaultLogger(l)
  14. }
  15. }

记录 Message

日志方法有两种格式:LevelfLevelTf(例如InfofInfoTf)。 每个方法种带有 “T” 的格式都接受 Message 的附加标签。

  1. syslog.Infof("my msg: %d", 10); // 映射到 INFO
  2. // 允许消息特定标记。
  3. // 此消息将使用此本地标记, 并且初始化期间传递的任何全局标记进行标记。
  4. syslog.InfoTf("tag", "my msg: %d", 10);
  5. syslog.Warnf("my msg: %d", 10); // 映射到 WARN
  6. syslog.WarnTf("tag", "my msg: %d", 10);
  7. syslog.Errorf("my msg: %d", 10); // 映射到 ERROR
  8. syslog.ErrorTf("tag", "my msg: %d", 10);
  9. syslog.Fatalf("my msg: %d", 10); // 映射到 FATAL
  10. syslog.FatalTf("tag", "my msg: %d", 10);

标准输入输出流

fmt.Printf()fmt.Sprintf() 等,标准输出(stdout)和标准错误(stderr)。

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