75f3dd141c
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
CI and Release / lint-frontend (push) Has been cancelled
CI and Release / dockerfile-scan (push) Has been cancelled
CI and Release / test-frontend (push) Has been cancelled
CI and Release / lint-verification-agent (push) Has been cancelled
CI and Release / test-verification-agent (push) Has been cancelled
CI and Release / e2e-verification-agent (push) Has been cancelled
CI and Release / test-backend (push) Has been cancelled
CI and Release / build-dev-image (push) Has been cancelled
CI and Release / push-dev-image (push) Has been cancelled
CI and Release / build-image (push) Has been cancelled
CI and Release / build-verification-image (push) Has been cancelled
CI and Release / determine-version (push) Has been cancelled
CI and Release / push-image (push) Has been cancelled
CI and Release / push-verification-image (12) (push) Has been cancelled
CI and Release / lint-backend (push) Has been cancelled
CI and Release / push-verification-image (17) (push) Has been cancelled
CI and Release / push-verification-image (18) (push) Has been cancelled
CI and Release / release (push) Has been cancelled
CI and Release / publish-helm-chart (push) Has been cancelled
CI and Release / push-verification-image (13) (push) Has been cancelled
CI and Release / push-verification-image (14) (push) Has been cancelled
CI and Release / push-verification-image (15) (push) Has been cancelled
CI and Release / push-verification-image (16) (push) Has been cancelled
66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
package logger
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
)
|
|
|
|
type MultiHandler struct {
|
|
stdoutHandler slog.Handler
|
|
victoriaLogsWriter *VictoriaLogsWriter
|
|
}
|
|
|
|
func NewMultiHandler(
|
|
stdoutHandler slog.Handler,
|
|
victoriaLogsWriter *VictoriaLogsWriter,
|
|
) *MultiHandler {
|
|
return &MultiHandler{
|
|
stdoutHandler: stdoutHandler,
|
|
victoriaLogsWriter: victoriaLogsWriter,
|
|
}
|
|
}
|
|
|
|
func (h *MultiHandler) Enabled(ctx context.Context, level slog.Level) bool {
|
|
if h.victoriaLogsWriter != nil {
|
|
return level >= slog.LevelDebug
|
|
}
|
|
|
|
return h.stdoutHandler.Enabled(ctx, level)
|
|
}
|
|
|
|
func (h *MultiHandler) Handle(ctx context.Context, record slog.Record) error {
|
|
// Send to stdout handler (only if level is enabled for stdout)
|
|
if h.stdoutHandler.Enabled(ctx, record.Level) {
|
|
if err := h.stdoutHandler.Handle(ctx, record); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
// Send to VictoriaLogs if configured
|
|
if h.victoriaLogsWriter != nil {
|
|
attrs := make(map[string]any)
|
|
record.Attrs(func(a slog.Attr) bool {
|
|
attrs[a.Key] = a.Value.Any()
|
|
return true
|
|
})
|
|
|
|
h.victoriaLogsWriter.Write(record.Level.String(), record.Message, attrs)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (h *MultiHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
|
|
return &MultiHandler{
|
|
stdoutHandler: h.stdoutHandler.WithAttrs(attrs),
|
|
victoriaLogsWriter: h.victoriaLogsWriter,
|
|
}
|
|
}
|
|
|
|
func (h *MultiHandler) WithGroup(name string) slog.Handler {
|
|
return &MultiHandler{
|
|
stdoutHandler: h.stdoutHandler.WithGroup(name),
|
|
victoriaLogsWriter: h.victoriaLogsWriter,
|
|
}
|
|
}
|