diff --git a/log/event.go b/log/event.go index 27f7d5b..5cebcb8 100644 --- a/log/event.go +++ b/log/event.go @@ -14,7 +14,7 @@ type Event struct { name string timestamp time.Time - level slog.Level + level Level duration time.Duration attrs map[string]any steps []stepRecord @@ -26,20 +26,20 @@ func NewEvent(name string) *Event { return &Event{ name: name, timestamp: time.Now(), - level: slog.LevelDebug, + level: LevelDebug, attrs: map[string]any{}, } } // SetLevel sets event level if it is higher than the current one. -func (e *Event) SetLevel(level slog.Level) { +func (e *Event) SetLevel(level Level) { e.mu.Lock() defer e.mu.Unlock() e.setLevelNoLock(level) } -func (e *Event) setLevelNoLock(level slog.Level) { +func (e *Event) setLevelNoLock(level Level) { if level > e.level { e.level = level } @@ -54,7 +54,7 @@ func (e *Event) AddAttrs(attrs map[string]any) { } // AddStep appends an event step and potentially escalates level. -func (e *Event) AddStep(level slog.Level, name string) { +func (e *Event) AddStep(level Level, name string) { e.mu.Lock() defer e.mu.Unlock() @@ -76,7 +76,7 @@ func (e *Event) AddError(err error) { e.mu.Lock() defer e.mu.Unlock() - e.setLevelNoLock(slog.LevelError) + e.setLevelNoLock(LevelError) e.errors = append(e.errors, errorRecord{ Timestamp: time.Now(), @@ -109,7 +109,7 @@ func (e *Event) Duration() time.Duration { } // Level returns the event level. -func (e *Event) Level() slog.Level { +func (e *Event) Level() Level { e.mu.Lock() defer e.mu.Unlock() @@ -207,7 +207,7 @@ func (e *Event) toAttrs(additionalReservedAttrKeys []string) []slog.Attr { type stepRecord struct { Timestamp time.Time - Level slog.Level + Level Level Name string } diff --git a/log/levels.go b/log/levels.go new file mode 100644 index 0000000..65da037 --- /dev/null +++ b/log/levels.go @@ -0,0 +1,15 @@ +package log + +import "log/slog" + +// Level is an alias for slog.Level representing log severity. +type Level = slog.Level + +// Log level constants. +const ( + LevelDebug Level = slog.LevelDebug + LevelInfo Level = slog.LevelInfo + LevelWarn Level = slog.LevelWarn + LevelError Level = slog.LevelError + LevelInfoForced Level = 10 +) diff --git a/log/log.go b/log/log.go index 4b8ccb5..c4aa799 100644 --- a/log/log.go +++ b/log/log.go @@ -22,7 +22,7 @@ type logger interface { } // Logger is the default logger instance used by package-level logging functions. -var Logger logger = New(os.Stdout, "text", slog.LevelInfo, nil) //nolint:gochecknoglobals +var Logger logger = New(os.Stdout, "text", LevelInfo, nil) //nolint:gochecknoglobals // SetDefault sets the default logger used by the package-level logging functions. func SetDefault(l logger) { @@ -82,7 +82,7 @@ func (h *contextHandler) Handle(ctx context.Context, r slog.Record) error { } // New creates a new slog.Logger with the specified type (json/text), log level, and additional context keys to include. -func New(w io.Writer, loggerType string, level slog.Level, contextKeys map[string]any) *slog.Logger { +func New(w io.Writer, loggerType string, level Level, contextKeys map[string]any) *slog.Logger { if loggerType == "json" { return slog.New(&contextHandler{slog.NewJSONHandler(w, &slog.HandlerOptions{Level: level}), contextKeys}) } diff --git a/log/wideevent_logger.go b/log/wideevent_logger.go index fef2503..d9b51a1 100644 --- a/log/wideevent_logger.go +++ b/log/wideevent_logger.go @@ -29,7 +29,7 @@ func NewWideEventLogger(w io.Writer, s Sampler, loggerType string, contextKeys m } opts := &slog.HandlerOptions{ - Level: slog.LevelDebug, + Level: LevelDebug, ReplaceAttr: func(_ []string, a slog.Attr) slog.Attr { if a.Key == slog.TimeKey { return slog.Attr{} @@ -77,22 +77,22 @@ func (l *WideEventLogger) Error(msg string, args ...any) { // DebugContext logs a message at Debug level with context. func (l *WideEventLogger) DebugContext(ctx context.Context, msg string, args ...any) { - l.writeSimpleLog(ctx, slog.LevelDebug, msg, args...) + l.writeSimpleLog(ctx, LevelDebug, msg, args...) } // InfoContext logs a message at Info level with context. func (l *WideEventLogger) InfoContext(ctx context.Context, msg string, args ...any) { - l.writeSimpleLog(ctx, slog.LevelInfo, msg, args...) + l.writeSimpleLog(ctx, LevelInfo, msg, args...) } // WarnContext logs a message at Warn level with context. func (l *WideEventLogger) WarnContext(ctx context.Context, msg string, args ...any) { - l.writeSimpleLog(ctx, slog.LevelWarn, msg, args...) + l.writeSimpleLog(ctx, LevelWarn, msg, args...) } // ErrorContext logs a message at Error level with context. func (l *WideEventLogger) ErrorContext(ctx context.Context, msg string, args ...any) { - l.writeSimpleLog(ctx, slog.LevelError, msg, args...) + l.writeSimpleLog(ctx, LevelError, msg, args...) } // WriteEvent finalizes event duration and conditionally writes it. @@ -104,7 +104,7 @@ func (l *WideEventLogger) WriteEvent(ctx context.Context, e *Event) { } } -func (l *WideEventLogger) writeSimpleLog(ctx context.Context, level slog.Level, msg string, args ...any) { +func (l *WideEventLogger) writeSimpleLog(ctx context.Context, level Level, msg string, args ...any) { event := NewEvent(simpleLogEventName) event.SetLevel(level) event.AddAttrs(simpleLogEventAttrs(args...)) @@ -118,7 +118,7 @@ func (l *WideEventLogger) writeSimpleLog(ctx context.Context, level slog.Level, func simpleLogEventAttrs(args ...any) map[string]any { attrs := map[string]any{} - record := slog.NewRecord(time.Time{}, slog.LevelInfo, "", 0) + record := slog.NewRecord(time.Time{}, LevelInfo, "", 0) record.Add(args...) record.Attrs(func(attr slog.Attr) bool { attrs[attr.Key] = attr.Value