本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

这是尚未发布的文档。 Admission Controller 1.34-dev.

日志记录

Go SDK几乎开箱即用地与https://github.com/francoispqt/onelog[onelog]项目集成。

该项目选择了这个库作为:

  • 它可以与WebAssembly二进制文件一起使用。 其他流行的日志解决方案无法编译为WebAssembly目标。

  • 它提供了https://github.com/francoispqt/onelog#benchmarks[良好的性能]。

  • 它支持结构化日志记录。

初始化日志记录器

您需要初始化一个日志记录器结构。 通过在全局变量中执行此初始化,您可以从两个主要策略入口点记录:validate`和`validate_settings

在主包中,`main.go`有日志记录器的初始化:

var (
    logWriter = kubewarden.KubewardenLogWriter{}
    logger    = onelog.New(
        &logWriter,
        onelog.ALL, // shortcut for onelog.DEBUG|onelog.INFO|onelog.WARN|onelog.ERROR|onelog.FATAL
    )
)

使用日志记录器

现在,您可以使用`logger`对象在需要的地方进行日志记录:

func validate(payload []byte) ([]byte, error) {
    // ...
    logger.Info("validating request")
    // ...
}

您可以添加结构化日志记录:

func validate(payload []byte) ([]byte, error) {
    // ...
    logger.WarnWithFields("logging something important", func(e onelog.Entry) {
        e.String("one_field", "a value")
        e.String("another_field", "another value")
    })
    // ...
}

您可以参考https://pkg.go.dev/github.com/francoispqt/onelog?utm_source=godoc[`onelog`文档]以获取更多信息。

策略日志记录发送到策略评估器(例如,kwctl`或`policy-server),它们代表策略进行日志记录。 它们使用与其他组件互操作的机制,这些组件支持分布式追踪,例如https://www.jaegertracing.io/[Jaeger]。