feat: add precise diagnostics and optional client copy logging controls
This commit is contained in:
40
logx/timeZone.go
Normal file
40
logx/timeZone.go
Normal file
@@ -0,0 +1,40 @@
|
||||
package logx
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log/slog"
|
||||
"time"
|
||||
|
||||
"git.yuntuo.hk/k2safe/go-omni/internal/configdiag"
|
||||
)
|
||||
|
||||
func logLocation(name string) (*time.Location, error) {
|
||||
if name == "" {
|
||||
return nil, nil
|
||||
}
|
||||
location, err := time.LoadLocation(name)
|
||||
if err != nil {
|
||||
return nil, configdiag.Wrap("timeZone", "must be an available IANA time zone or UTC", err)
|
||||
}
|
||||
return location, nil
|
||||
}
|
||||
|
||||
// Convert only the record timestamp. User time.Time attributes retain their
|
||||
// original locations; child loggers inherit this instance's location.
|
||||
type zoneHandler struct {
|
||||
slog.Handler
|
||||
location *time.Location
|
||||
}
|
||||
|
||||
func (h zoneHandler) Handle(ctx context.Context, r slog.Record) error {
|
||||
if !r.Time.IsZero() {
|
||||
r.Time = r.Time.In(h.location)
|
||||
}
|
||||
return h.Handler.Handle(ctx, r)
|
||||
}
|
||||
func (h zoneHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
|
||||
return zoneHandler{h.Handler.WithAttrs(attrs), h.location}
|
||||
}
|
||||
func (h zoneHandler) WithGroup(name string) slog.Handler {
|
||||
return zoneHandler{h.Handler.WithGroup(name), h.location}
|
||||
}
|
||||
Reference in New Issue
Block a user