Oauth. Car Backups.
This commit is contained in:
50
data/app_log_handler.go
Normal file
50
data/app_log_handler.go
Normal file
@@ -0,0 +1,50 @@
|
||||
package data
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"log/slog"
|
||||
"time"
|
||||
)
|
||||
|
||||
type AppLogHandler struct {
|
||||
level slog.Level
|
||||
logFunc func(string, ...any)
|
||||
attrs []slog.Attr
|
||||
groups []string
|
||||
}
|
||||
|
||||
func NewAppLogHandler(f func(string, ...any)) *AppLogHandler {
|
||||
return &AppLogHandler{logFunc: f}
|
||||
}
|
||||
|
||||
func (a *AppLogHandler) SetLevel(l slog.Level) { a.level = l }
|
||||
func (a *AppLogHandler) setAttrs(attrs ...slog.Attr) { a.attrs = attrs }
|
||||
func (a *AppLogHandler) addAttrs(attrs ...slog.Attr) { a.attrs = append(a.attrs, attrs...) }
|
||||
func (a *AppLogHandler) setGroups(groups ...string) { a.groups = groups }
|
||||
func (a *AppLogHandler) addGroups(groups ...string) { a.groups = append(a.groups, groups...) }
|
||||
|
||||
// AppLogHandler can handle all levels
|
||||
func (a *AppLogHandler) Enabled(_ context.Context, lvl slog.Level) bool { return lvl >= a.level }
|
||||
|
||||
func (a *AppLogHandler) Handle(ctx context.Context, rcd slog.Record) error {
|
||||
if a.logFunc == nil {
|
||||
return errors.New("no log func defined")
|
||||
}
|
||||
a.logFunc("%s %s %s", rcd.Time.Format(time.TimeOnly), rcd.Level, rcd.Message)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (a *AppLogHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
|
||||
attrs = append(attrs, a.attrs...)
|
||||
ret := NewAppLogHandler(a.logFunc)
|
||||
ret.addAttrs(attrs...)
|
||||
return ret
|
||||
}
|
||||
|
||||
func (a *AppLogHandler) WithGroup(name string) slog.Handler {
|
||||
groups := append(a.groups, name)
|
||||
ret := NewAppLogHandler(a.logFunc)
|
||||
ret.setGroups(groups...)
|
||||
return ret
|
||||
}
|
||||
Reference in New Issue
Block a user