diff --git a/pkg/log/zap/field.go b/pkg/log/zap/field.go index c6db51017c06cba4e6fd8053d7ece20ba2247451..e7041a9fa2328bc64728a502db4c20639142b709 100644 --- a/pkg/log/zap/field.go +++ b/pkg/log/zap/field.go @@ -1,8 +1,10 @@ package zap import ( + "context" "fmt" + "git.perx.ru/perxis/perxis-go/pkg/auth" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) @@ -24,38 +26,49 @@ func Event(event string) zapcore.Field { return zap.String("event", event) } -// Object возвращает поле и устанавливает передаваемый аргумент в качестве идентификатора объекта в формате GlobalID. -// Поддерживает один из типов: string, fmt.Stringer. Если передан аргумент другого типа, в качестве идентификатора объекта -// будет установлен "unknown". +// Object возвращает поле и устанавливает передаваемый аргумент в качестве идентификатора объекта в формате ObjectID. +// Поддерживаемые типы: string, fmt.Stringer. +// Если передан аргумент другого типа, будет произведена попытка привести переданное значение к ObjectID. func Object(v any) zapcore.Field { - var object string + var object = unknownObject switch value := v.(type) { case string: object = value case fmt.Stringer: object = value.String() default: - object = unknownObject + oid, err := id.FromObject(v) + if err == nil { + object = oid.String() + } } return zap.String("object", object) } -// Caller возвращает поле и устанавливает передаваемый аргумент в качестве "вызывающего" в формате GlobalID. -// Поддерживает один из типов: string, fmt.Stringer. Если передан аргумент другого типа, в качестве вызывающего -// будет установлен "unknown". +// Caller возвращает поле и устанавливает передаваемый аргумент в качестве "вызывающего" в формате ObjectID. +// Поддерживаемые типы: string, fmt.Stringer. +// Если передан аргумент другого типа, будет произведена попытка привести переданное значение к ObjectID. func Caller(v any) zapcore.Field { - var caller string + var caller = unknownCaller switch value := v.(type) { case string: caller = value case fmt.Stringer: caller = value.String() default: - caller = unknownCaller + oid, err := id.FromObject(v) + if err == nil { + caller = oid.String() + } } return zap.String("caller", caller) } +// CallerFromContext извлекает auth.Principal из контекста и устанавливает его в качестве "вызывающего" в формате ObjectID. +func CallerFromContext(ctx context.Context) zapcore.Field { + return Caller(auth.GetPrincipal(ctx)) +} + func Attr(attr any) zapcore.Field { return zap.Any("attr", attr) }