package simplelog import ( "context" "encoding/json" "fmt" "log/slog" "os" ) type JSONHandler struct { attrs handlerAttrs } func NewJSONHandler() *JSONHandler { return &JSONHandler{} } func (j *JSONHandler) Handle(ctx context.Context, record slog.Record) error { jsonData, err := json.Marshal(recordToMap(record, j.attrs)) if err != nil { return fmt.Errorf("error marshaling log record: %w", err) } fmt.Fprintln(os.Stdout, string(jsonData)) return nil } func (j *JSONHandler) Enabled(ctx context.Context, level slog.Level) bool { return true } func (j *JSONHandler) WithAttrs(attrs []slog.Attr) slog.Handler { if len(attrs) == 0 { return j } return &JSONHandler{attrs: j.attrs.withAttrs(attrs)} } func (j *JSONHandler) WithGroup(name string) slog.Handler { if name == "" { return j } return &JSONHandler{attrs: j.attrs.withGroup(name)} }