Files
go-honeybee/logging/logging.go
T
2026-04-23 19:24:40 -04:00

112 lines
2.6 KiB
Go

package logging
import (
"context"
"log/slog"
)
// Constants
const KEY_MODULE = "module"
const KEY_COMPONENT = "component"
const KEY_POOL_ID = "pool_id"
const KEY_PEER_ID = "peer_id"
const MODULE_NAME = "honeybee"
const COMPONENT_OUTBOUND_POOL = "outbound_pool"
const COMPONENT_OUTBOUND_WORKER = "outbound_worker"
const COMPONENT_INBOUND_POOL = "inbound_pool"
const COMPONENT_INBOUND_WORKER = "inbound_worker"
const COMPONENT_CONNECTION = "connection"
// Constructors
func NewOutboundPoolLogger(handler slog.Handler, poolID string) *slog.Logger {
return newLogger(handler,
KEY_MODULE, MODULE_NAME,
KEY_COMPONENT, COMPONENT_OUTBOUND_POOL,
KEY_POOL_ID, poolID,
)
}
func NewOutboundWorkerLogger(handler slog.Handler, poolID string, peerID string) *slog.Logger {
return newLogger(handler,
KEY_MODULE, MODULE_NAME,
KEY_COMPONENT, COMPONENT_OUTBOUND_WORKER,
KEY_POOL_ID, poolID,
KEY_PEER_ID, peerID,
)
}
func NewInboundPoolLogger(handler slog.Handler, poolID string) *slog.Logger {
return newLogger(handler,
KEY_MODULE, MODULE_NAME,
KEY_COMPONENT, COMPONENT_INBOUND_POOL,
KEY_POOL_ID, poolID,
)
}
func NewInboundWorkerLogger(handler slog.Handler, poolID string, peerID string) *slog.Logger {
return newLogger(handler,
KEY_MODULE, MODULE_NAME,
KEY_COMPONENT, COMPONENT_INBOUND_WORKER,
KEY_POOL_ID, poolID,
KEY_PEER_ID, peerID,
)
}
func NewConnectionLogger(handler slog.Handler, poolID string, peerID string) *slog.Logger {
return newLogger(handler,
KEY_MODULE, MODULE_NAME,
KEY_COMPONENT, COMPONENT_CONNECTION,
KEY_POOL_ID, poolID,
KEY_PEER_ID, peerID,
)
}
// Helpers
func newLogger(handler slog.Handler, attrs ...any) *slog.Logger {
return slog.New(handler).With(attrs...)
}
// Handlers
type ForcedLevelHandler struct {
level slog.Level
next slog.Handler
}
func NewForcedLevelHandler(level slog.Level, next slog.Handler) slog.Handler {
return &ForcedLevelHandler{
level: level,
next: next,
}
}
func (h *ForcedLevelHandler) Enabled(_ context.Context, l slog.Level) bool {
return l >= h.level
}
func (h *ForcedLevelHandler) Handle(ctx context.Context, r slog.Record) error {
return h.next.Handle(ctx, r)
}
func (h *ForcedLevelHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
return &ForcedLevelHandler{level: h.level, next: h.next.WithAttrs(attrs)}
}
func (h *ForcedLevelHandler) WithGroup(name string) slog.Handler {
return &ForcedLevelHandler{level: h.level, next: h.next.WithGroup(name)}
}
func WrapOrDefault(level *slog.Level, handler slog.Handler) slog.Handler {
if level != nil {
return NewForcedLevelHandler(*level, handler)
}
return handler
}