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:
deps = ["//src/lib/component","//src/lib/syslog/go",]
See Go: Overview for more information about building Go within Fuchsia. —>
Requirements
GN 依赖
必要的 package 包含在 BUILD.gn 中的 deps 中:
deps = ["//src/lib/component","//src/lib/syslog/go",]
有关在 Fuchsia 中构建 Go 的更多信息,请参阅 Go: Overview。
组件依赖清单
通过在组件清单中包含以下内容,确保您的组件具有记录所需的功能:
* {.cmx}
{"include": ["sdk/lib/diagnostics/syslog/client.shard.cmx"],...}
* {.cml}
{include: ["sdk/lib/diagnostics/syslog/client.shard.cml"],...}
注意:以上仅适用于 in-tree 开发。 这在 fxbug.dev/64207 中进行了跟踪。 Out of tree 开发人员应该复制下面所述片段。
* {.cmx}
{"sandbox": {"services": ["fuchsia.logger.LogSink"]},...}
* {.cml}
{use: [{ protocol: "fuchsia.logger.LogSink" },],...}
如果 LogSink 连接失败,syslog 库将回退到 stderr。
初始化
初始化时如果没有任何 tag 的话,将默认使用进程名称。
import ("go.fuchsia.dev/fuchsia/src/lib/component"syslog "go.fuchsia.dev/fuchsia/src/lib/syslog/go")func main() {ctx := component.NewContextFromStartupInfo(){// 全局 tag, 最多可传递 4 个 tag. 每条日志消息都标有这些 tag.l, err := syslog.NewLoggerWithDefaults(ctx.Connector(), "my_tag")if err != nil {panic(err)}syslog.SetDefaultLogger(l)}}
记录 Message
日志方法有两种格式:Levelf 和 LevelTf(例如Infof 和InfoTf)。 每个方法种带有 “T” 的格式都接受 Message 的附加标签。
syslog.Infof("my msg: %d", 10); // 映射到 INFO// 允许消息特定标记。// 此消息将使用此本地标记, 并且初始化期间传递的任何全局标记进行标记。syslog.InfoTf("tag", "my msg: %d", 10);syslog.Warnf("my msg: %d", 10); // 映射到 WARNsyslog.WarnTf("tag", "my msg: %d", 10);syslog.Errorf("my msg: %d", 10); // 映射到 ERRORsyslog.ErrorTf("tag", "my msg: %d", 10);syslog.Fatalf("my msg: %d", 10); // 映射到 FATALsyslog.FatalTf("tag", "my msg: %d", 10);
标准输入输出流
fmt.Printf()、fmt.Sprintf() 等,标准输出(stdout)和标准错误(stderr)。
有关系统中 stdio 流路由的详细信息,请参阅与语言无关的日志记录文档中的 [stdout 和 stderr]。
