zdravko/pkg/temporal/log.go

40 lines
1.3 KiB
Go

package temporal
import (
"context"
"log/slog"
"go.temporal.io/server/common/log"
"go.temporal.io/server/common/log/tag"
)
type slogLogger struct {
log *slog.Logger
level slog.Level
}
var _ log.Logger = slogLogger{}
func (s slogLogger) Debug(msg string, tags ...tag.Tag) { s.Log(slog.LevelDebug, msg, tags) }
func (s slogLogger) Info(msg string, tags ...tag.Tag) { s.Log(slog.LevelInfo, msg, tags) }
func (s slogLogger) Warn(msg string, tags ...tag.Tag) { s.Log(slog.LevelWarn, msg, tags) }
func (s slogLogger) Error(msg string, tags ...tag.Tag) { s.Log(slog.LevelError, msg, tags) }
// Panics and fatals are just errors
func (s slogLogger) DPanic(msg string, tags ...tag.Tag) { s.Log(slog.LevelError, msg, tags) }
func (s slogLogger) Panic(msg string, tags ...tag.Tag) { s.Log(slog.LevelError, msg, tags) }
func (s slogLogger) Fatal(msg string, tags ...tag.Tag) { s.Log(slog.LevelError, msg, tags) }
func (s slogLogger) Log(level slog.Level, msg string, tags []tag.Tag) {
if level >= s.level && s.log.Enabled(context.Background(), level) {
s.log.LogAttrs(context.Background(), level, msg, logTagsToAttrs(tags)...)
}
}
func logTagsToAttrs(tags []tag.Tag) []slog.Attr {
attrs := make([]slog.Attr, len(tags))
for i, tag := range tags {
attrs[i] = slog.Any(tag.Key(), tag.Value())
}
return attrs
}