Select Git revision
revision.go
field.go 2.41 KiB
package zap
import (
"context"
"git.perx.ru/perxis/perxis-go/id"
_ "git.perx.ru/perxis/perxis-go/id/system" // регистрируем обработчики для системных объектов
"git.perx.ru/perxis/perxis-go/pkg/auth"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
type StringArray []string
func (ss StringArray) MarshalLogArray(arr zapcore.ArrayEncoder) error {
for i := range ss {
arr.AppendString(ss[i])
}
return nil
}
// Channels возвращает поле, содержащее список каналов, в которые должна быть передана запись.
func Channels(channels ...string) zap.Field {
return zap.Field{
Key: channelKey,
Type: zapcore.SkipType, // используем тип zapcore.SkipType, чтобы при кодировании поле игнорировалось
Interface: StringArray(channels),
}
}
func Category(category string) zap.Field {
return zap.String("category", category)
}
func Component(component string) zap.Field {
return zap.String("component", component)
}
func Event(event string) zap.Field {
return zap.String("event", event)
}
// Object возвращает поле и устанавливает передаваемый аргумент в качестве идентификатора объекта в формате ObjectId.
// Поддерживает типы в формате ObjectId: id.Descriptor, string, map[string]any, системные объекты.
func Object(v any) zap.Field {
oid, _ := id.NewObjectId(v)
return zap.Reflect("object", oid)
}
// Caller возвращает поле и устанавливает передаваемый аргумент в качестве "вызывающего" в формате ObjectId.
// Поддерживает типы в формате ObjectId: id.Descriptor, string, map[string]any, системные объекты.
func Caller(v any) zap.Field {
oid, _ := id.NewObjectId(v)
return zap.Reflect("caller", oid)
}
// CallerFromContext извлекает auth.Principal из контекста и устанавливает его в качестве "вызывающего" в формате Object.
func CallerFromContext(ctx context.Context) zap.Field {
return Caller(auth.GetPrincipal(ctx))
}
func Attr(attr any) zap.Field {
return zap.Reflect("attr", attr)
}
func Tags(tags ...string) zap.Field {
return zap.Array("tags", StringArray(tags))
}