Add support to tagged Struct types by flejz · Pull Request #677 · rs/zerolog

One use case that me and my coworkers found is that we would often be loggin the same fields from a Struct over and over again, so we came up with the idea of logging tagged structs. That's what this PR is about.

That introduces a new concept of tagging the Struct with log followed by the log field name as the example below:

type User struct {
  Name   string `log:"name"`
  Active bool   `log:"is_active"`
}

Usage

We are introducing a new logging method Struct where you can pass the struct as an interface parameter.

user := User {
  Name:   "dude",
  Active: true,
}

log.Log().Struct(user).Msg("")

That would generate the log result as follows:

{"name":"dude","is_active":true}

PS: Ommiting the log tag will omit the struct field from the logs
PS2: Nested struct fields are also supported