| package log | |
| import ( | |
| "encoding/json" | |
| "go.uber.org/zap/zapcore" | |
| ) | |
| func EncodeAny(encoder zapcore.ObjectEncoder, key string, obj any) error { | |
| switch raw := obj.(type) { | |
| case zapcore.ObjectMarshaler: | |
| return encoder.AddObject(key, raw) | |
| case json.Marshaler: | |
| return encoder.AddReflected(key, raw) | |
| case error: | |
| // must behind json.Marshaler and ObjectMarshaler | |
| encoder.AddString(key, raw.Error()) | |
| return nil | |
| default: | |
| return encoder.AddReflected(key, raw) | |
| } | |
| } | |