diff --git a/pkg/log/zap/field.go b/pkg/log/zap/field.go index 77ddf563646e6e91cf48966a24a632fe7a89475a..aece1e9e79e92c92e246af7a0776e904ab92fdf5 100644 --- a/pkg/log/zap/field.go +++ b/pkg/log/zap/field.go @@ -8,7 +8,10 @@ import ( "go.uber.org/zap/zapcore" ) -const unknownCaller = "unknown" +const ( + unknownObject = "unknown" + unknownCaller = "unknown" +) func Category(category string) zapcore.Field { return zap.String("category", category) @@ -22,26 +25,39 @@ func Event(event string) zapcore.Field { return zap.String("event", event) } +// Object добавляет передаваемый аргумент в качестве идентификатор объекта в формате GlobalID. +// Поддерживает один из типов: string, fmt.Stringer. Если передан аргумент другого типа, в качестве вызывающего +// будет установлен "unknown". func Object(v any) zapcore.Field { - switch object := v.(type) { + var object string + switch value := v.(type) { case string: - return zap.String("object", object) + object = value case fmt.Stringer: - return zap.String("object", object.String()) + object = value.String() default: - return zap.Any("object", object) + object = unknownObject } + return zap.String("value", object) } type callerKey struct{} -func ContextWithCaller(parent context.Context, caller string) context.Context { +// ContextWithCaller добавляет передаваемый аргумент в качестве "вызывающего" в формате GlobalID. +// Поддерживает один из типов: string, fmt.Stringer. Если передан аргумент другого типа, в качестве вызывающего +// будет установлен "unknown". +func ContextWithCaller(parent context.Context, caller any) context.Context { return context.WithValue(parent, callerKey{}, caller) } func CallerFromContext(ctx context.Context) zapcore.Field { - caller, ok := ctx.Value(callerKey{}).(string) - if !ok { + var caller string + switch value := ctx.Value(callerKey{}).(type) { + case string: + caller = value + case fmt.Stringer: + caller = value.String() + default: caller = unknownCaller } return zap.String("caller", caller)