Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
parent
4c3c4859fc
commit
4b261083d6
@ -61,8 +61,8 @@ func (s *slogLogger) renameAttr(_ []string, a slog.Attr) slog.Attr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type slogLogger struct {
|
type slogLogger struct {
|
||||||
slog *slog.Logger
|
|
||||||
leveler *slog.LevelVar
|
leveler *slog.LevelVar
|
||||||
|
handler slog.Handler
|
||||||
opts logger.Options
|
opts logger.Options
|
||||||
mu sync.RWMutex
|
mu sync.RWMutex
|
||||||
}
|
}
|
||||||
@ -70,6 +70,7 @@ type slogLogger struct {
|
|||||||
func (s *slogLogger) Clone(opts ...options.Option) logger.Logger {
|
func (s *slogLogger) Clone(opts ...options.Option) logger.Logger {
|
||||||
s.mu.RLock()
|
s.mu.RLock()
|
||||||
options := s.opts
|
options := s.opts
|
||||||
|
s.mu.RUnlock()
|
||||||
|
|
||||||
for _, o := range opts {
|
for _, o := range opts {
|
||||||
_ = o(&options)
|
_ = o(&options)
|
||||||
@ -86,10 +87,7 @@ func (s *slogLogger) Clone(opts ...options.Option) logger.Logger {
|
|||||||
AddSource: l.opts.AddSource,
|
AddSource: l.opts.AddSource,
|
||||||
}
|
}
|
||||||
l.leveler.Set(loggerToSlogLevel(l.opts.Level))
|
l.leveler.Set(loggerToSlogLevel(l.opts.Level))
|
||||||
handler := slog.NewJSONHandler(options.Out, handleOpt)
|
l.handler = slog.New(slog.NewJSONHandler(options.Out, handleOpt)).With(options.Attrs...).Handler()
|
||||||
l.slog = slog.New(handler).With(options.Attrs...)
|
|
||||||
|
|
||||||
s.mu.RUnlock()
|
|
||||||
|
|
||||||
return l
|
return l
|
||||||
}
|
}
|
||||||
@ -108,9 +106,13 @@ func (s *slogLogger) Options() logger.Options {
|
|||||||
|
|
||||||
func (s *slogLogger) Attrs(attrs ...interface{}) logger.Logger {
|
func (s *slogLogger) Attrs(attrs ...interface{}) logger.Logger {
|
||||||
s.mu.RLock()
|
s.mu.RLock()
|
||||||
l := &slogLogger{opts: s.opts}
|
level := s.leveler.Level()
|
||||||
|
options := s.opts
|
||||||
|
s.mu.RUnlock()
|
||||||
|
|
||||||
|
l := &slogLogger{opts: options}
|
||||||
l.leveler = new(slog.LevelVar)
|
l.leveler = new(slog.LevelVar)
|
||||||
l.leveler.Set(s.leveler.Level())
|
l.leveler.Set(level)
|
||||||
|
|
||||||
handleOpt := &slog.HandlerOptions{
|
handleOpt := &slog.HandlerOptions{
|
||||||
ReplaceAttr: l.renameAttr,
|
ReplaceAttr: l.renameAttr,
|
||||||
@ -118,10 +120,7 @@ func (s *slogLogger) Attrs(attrs ...interface{}) logger.Logger {
|
|||||||
AddSource: l.opts.AddSource,
|
AddSource: l.opts.AddSource,
|
||||||
}
|
}
|
||||||
|
|
||||||
handler := slog.NewJSONHandler(s.opts.Out, handleOpt)
|
l.handler = slog.New(slog.NewJSONHandler(s.opts.Out, handleOpt)).With(attrs...).Handler()
|
||||||
l.slog = slog.New(handler).With(attrs...)
|
|
||||||
|
|
||||||
s.mu.RUnlock()
|
|
||||||
|
|
||||||
return l
|
return l
|
||||||
}
|
}
|
||||||
@ -146,8 +145,7 @@ func (s *slogLogger) Init(opts ...options.Option) error {
|
|||||||
AddSource: s.opts.AddSource,
|
AddSource: s.opts.AddSource,
|
||||||
}
|
}
|
||||||
s.leveler.Set(loggerToSlogLevel(s.opts.Level))
|
s.leveler.Set(loggerToSlogLevel(s.opts.Level))
|
||||||
handler := slog.NewJSONHandler(s.opts.Out, handleOpt)
|
s.handler = slog.New(slog.NewJSONHandler(s.opts.Out, handleOpt)).With(s.opts.Attrs...).Handler()
|
||||||
s.slog = slog.New(handler).With(s.opts.Attrs...)
|
|
||||||
s.mu.Unlock()
|
s.mu.Unlock()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -163,9 +161,9 @@ func (s *slogLogger) Log(ctx context.Context, lvl logger.Level, msg string, attr
|
|||||||
for _, fn := range s.opts.ContextAttrFuncs {
|
for _, fn := range s.opts.ContextAttrFuncs {
|
||||||
attrs = append(attrs, fn(ctx)...)
|
attrs = append(attrs, fn(ctx)...)
|
||||||
}
|
}
|
||||||
for _, a := range attrs {
|
for idx, attr := range attrs {
|
||||||
if ve, ok := a.(error); ok && ve != nil {
|
if ve, ok := attr.(error); ok && ve != nil {
|
||||||
attrs = append(attrs, slog.String(s.opts.ErrorKey, ve.Error()))
|
attrs[idx] = slog.String(s.opts.ErrorKey, ve.Error())
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -188,7 +186,7 @@ func (s *slogLogger) Log(ctx context.Context, lvl logger.Level, msg string, attr
|
|||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
_ = s.slog.Handler().Handle(ctx, r)
|
_ = s.handler.Handle(ctx, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *slogLogger) Info(ctx context.Context, msg string, attrs ...interface{}) {
|
func (s *slogLogger) Info(ctx context.Context, msg string, attrs ...interface{}) {
|
||||||
@ -201,8 +199,14 @@ func (s *slogLogger) Info(ctx context.Context, msg string, attrs ...interface{})
|
|||||||
for _, fn := range s.opts.ContextAttrFuncs {
|
for _, fn := range s.opts.ContextAttrFuncs {
|
||||||
attrs = append(attrs, fn(ctx)...)
|
attrs = append(attrs, fn(ctx)...)
|
||||||
}
|
}
|
||||||
|
for idx, attr := range attrs {
|
||||||
|
if ve, ok := attr.(error); ok && ve != nil {
|
||||||
|
attrs[idx] = slog.String(s.opts.ErrorKey, ve.Error())
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
r.Add(attrs...)
|
r.Add(attrs...)
|
||||||
_ = s.slog.Handler().Handle(ctx, r)
|
_ = s.handler.Handle(ctx, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *slogLogger) Debug(ctx context.Context, msg string, attrs ...interface{}) {
|
func (s *slogLogger) Debug(ctx context.Context, msg string, attrs ...interface{}) {
|
||||||
@ -215,8 +219,14 @@ func (s *slogLogger) Debug(ctx context.Context, msg string, attrs ...interface{}
|
|||||||
for _, fn := range s.opts.ContextAttrFuncs {
|
for _, fn := range s.opts.ContextAttrFuncs {
|
||||||
attrs = append(attrs, fn(ctx)...)
|
attrs = append(attrs, fn(ctx)...)
|
||||||
}
|
}
|
||||||
|
for idx, attr := range attrs {
|
||||||
|
if ve, ok := attr.(error); ok && ve != nil {
|
||||||
|
attrs[idx] = slog.String(s.opts.ErrorKey, ve.Error())
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
r.Add(attrs...)
|
r.Add(attrs...)
|
||||||
_ = s.slog.Handler().Handle(ctx, r)
|
_ = s.handler.Handle(ctx, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *slogLogger) Trace(ctx context.Context, msg string, attrs ...interface{}) {
|
func (s *slogLogger) Trace(ctx context.Context, msg string, attrs ...interface{}) {
|
||||||
@ -229,8 +239,14 @@ func (s *slogLogger) Trace(ctx context.Context, msg string, attrs ...interface{}
|
|||||||
for _, fn := range s.opts.ContextAttrFuncs {
|
for _, fn := range s.opts.ContextAttrFuncs {
|
||||||
attrs = append(attrs, fn(ctx)...)
|
attrs = append(attrs, fn(ctx)...)
|
||||||
}
|
}
|
||||||
|
for idx, attr := range attrs {
|
||||||
|
if ve, ok := attr.(error); ok && ve != nil {
|
||||||
|
attrs[idx] = slog.String(s.opts.ErrorKey, ve.Error())
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
r.Add(attrs...)
|
r.Add(attrs...)
|
||||||
_ = s.slog.Handler().Handle(ctx, r)
|
_ = s.handler.Handle(ctx, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *slogLogger) Error(ctx context.Context, msg string, attrs ...interface{}) {
|
func (s *slogLogger) Error(ctx context.Context, msg string, attrs ...interface{}) {
|
||||||
@ -243,9 +259,9 @@ func (s *slogLogger) Error(ctx context.Context, msg string, attrs ...interface{}
|
|||||||
for _, fn := range s.opts.ContextAttrFuncs {
|
for _, fn := range s.opts.ContextAttrFuncs {
|
||||||
attrs = append(attrs, fn(ctx)...)
|
attrs = append(attrs, fn(ctx)...)
|
||||||
}
|
}
|
||||||
for _, a := range attrs {
|
for idx, attr := range attrs {
|
||||||
if ve, ok := a.(error); ok && ve != nil {
|
if ve, ok := attr.(error); ok && ve != nil {
|
||||||
attrs = append(attrs, slog.String(s.opts.ErrorKey, ve.Error()))
|
attrs[idx] = slog.String(s.opts.ErrorKey, ve.Error())
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -268,7 +284,7 @@ func (s *slogLogger) Error(ctx context.Context, msg string, attrs ...interface{}
|
|||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
_ = s.slog.Handler().Handle(ctx, r)
|
_ = s.handler.Handle(ctx, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *slogLogger) Fatal(ctx context.Context, msg string, attrs ...interface{}) {
|
func (s *slogLogger) Fatal(ctx context.Context, msg string, attrs ...interface{}) {
|
||||||
@ -281,8 +297,14 @@ func (s *slogLogger) Fatal(ctx context.Context, msg string, attrs ...interface{}
|
|||||||
for _, fn := range s.opts.ContextAttrFuncs {
|
for _, fn := range s.opts.ContextAttrFuncs {
|
||||||
attrs = append(attrs, fn(ctx)...)
|
attrs = append(attrs, fn(ctx)...)
|
||||||
}
|
}
|
||||||
|
for idx, attr := range attrs {
|
||||||
|
if ve, ok := attr.(error); ok && ve != nil {
|
||||||
|
attrs[idx] = slog.String(s.opts.ErrorKey, ve.Error())
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
r.Add(attrs...)
|
r.Add(attrs...)
|
||||||
_ = s.slog.Handler().Handle(ctx, r)
|
_ = s.handler.Handle(ctx, r)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -296,8 +318,14 @@ func (s *slogLogger) Warn(ctx context.Context, msg string, attrs ...interface{})
|
|||||||
for _, fn := range s.opts.ContextAttrFuncs {
|
for _, fn := range s.opts.ContextAttrFuncs {
|
||||||
attrs = append(attrs, fn(ctx)...)
|
attrs = append(attrs, fn(ctx)...)
|
||||||
}
|
}
|
||||||
|
for idx, attr := range attrs {
|
||||||
|
if ve, ok := attr.(error); ok && ve != nil {
|
||||||
|
attrs[idx] = slog.String(s.opts.ErrorKey, ve.Error())
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
r.Add(attrs...)
|
r.Add(attrs...)
|
||||||
_ = s.slog.Handler().Handle(ctx, r)
|
_ = s.handler.Handle(ctx, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *slogLogger) Name() string {
|
func (s *slogLogger) Name() string {
|
||||||
|
Loading…
Reference in New Issue
Block a user