package zapslog
import (
)
const (
loggerNameKey = "logger_name"
stackKey = "stack"
)
type Core struct {
ctx context.Context
handler slog.Handler
fields []zapcore.Field
}
func ( context.Context, slog.Handler) *Core {
return &Core{
ctx: ,
handler: ,
}
}
func ( *Core) ( []zapcore.Field) []zapcore.Field {
:=
if := len(.fields); != 0 {
= make([]zapcore.Field, 0, +len())
= append(, .fields...)
= append(, ...)
}
return
}
func ( *Core) ( zapcore.Level) bool {
return .handler.Enabled(.ctx, convertLogLevel())
}
func ( *Core) ( []zapcore.Field) zapcore.Core {
:= *
.fields = .appendFields()
return &
}
func ( *Core) ( zapcore.Entry, *zapcore.CheckedEntry) *zapcore.CheckedEntry {
if .Enabled(.Level) {
return .AddCore(, )
}
return
}
func ( *Core) ( zapcore.Entry, []zapcore.Field) error {
:= slog.NewRecord(
.Time,
convertLogLevel(.Level),
.Message,
.Caller.PC,
)
if .LoggerName != "" {
.AddAttrs(slog.String(loggerNameKey, .LoggerName))
}
.AddAttrs(encodeFields(.appendFields())...)
if .Stack != "" {
.AddAttrs(slog.String(stackKey, .Stack))
}
return .handler.Handle(.ctx, )
}
func ( *Core) () error {
return nil
}