1c6d99b455
As per https://github.com/rs/zerolog/issues/9 and to offer a different approach from https://github.com/rs/zerolog/pull/11 and https://github.com/rs/zerolog/pull/35 this PR introduces custom error serialization with sane defaults without breaking the existing APIs. This is just a first draft and is missing tests. Also, a bit of code duplication which I feel could be reduced but it serves to get the idea across. It provides global error marshalling by exposing a `var ErrorMarshalFunc func(error) interface{}` in zerolog package that by default is a function that returns the passed argument. It should be overriden if you require custom error marshalling. Then in every function that accept error or array of errors `ErrorMarshalFunc` is called on the error and then the result of it is processed like this: - if it implements `LogObjectMarshaler`, serialize it as an object - if it is a string serialize as a string - if it is an error, serialize as a string with the result of `Error()` - else serialize it as an interface The side effect of this change is that the encoders don't need the `AppendError/s` methods anymore, as the errors are serialized directly to other types.
12 lines
279 B
Go
12 lines
279 B
Go
package json
|
|
|
|
type Encoder struct{}
|
|
|
|
// AppendKey appends a new key to the output JSON.
|
|
func (e Encoder) AppendKey(dst []byte, key string) []byte {
|
|
if len(dst) > 1 && dst[len(dst)-1] != '{' {
|
|
dst = append(dst, ',')
|
|
}
|
|
dst = e.AppendString(dst, key)
|
|
return append(dst, ':')
|
|
} |