如何通过 Zerolog 自动记录结构?

Zha*_* Yi 3 logging go

我用于zerolog登录 go 应用程序。我想记录一个地图(json)并找到一种方法:

log.Info().
    Str("foo", "bar").
    Dict("dict", zerolog.Dict().
        Str("bar", "baz").
        Int("n", 1),
    ).Msg("hello world")

// Output: {"level":"info","time":1494567715,"foo":"bar","dict":{"bar":"baz","n":1},"message":"hello world"}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我需要key-value在方法中指定每一对zerolog.Dict()。我想知道是否有自动记录struct.

例如,我有一个类似的结构:

type Message struct {
    AWS_REGION     string `json:"region"`
    LOG_LEVEL      string `json:"level"`
    STAGE          string `json:"stage"`
    REQUEST_ID     string `json:"requestId"`
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种将Message实例传递给的方法

msg := Message{ ... }
zerolog.Dict("message", msg)
Run Code Online (Sandbox Code Playgroud)

小智 5

您可以使用该Interface方法来实现此目的。

例子

但是,请注意,Interface使用反射进行序列化,因此代码简短会以性能为代价