Chore: Remove prometheus replace directive (#98966)
* remove replace directive * have an adapter * go mod tidy * make update-workspace * make update-workspace
This commit is contained in:
@@ -114,7 +114,9 @@ func NewExternalAlertmanagerSender(l log.Logger, reg prometheus.Registerer, opts
|
||||
s.logger.Error("failed to register service discovery metrics", "error", err)
|
||||
return nil, err
|
||||
}
|
||||
s.sdManager = discovery.NewManager(sdCtx, s.logger, prometheus.NewRegistry(), sdMetrics)
|
||||
// Convert s.Logger to slog.Logger using the adapter
|
||||
slogLogger := toSlogLogger(s.logger)
|
||||
s.sdManager = discovery.NewManager(sdCtx, slogLogger, prometheus.NewRegistry(), sdMetrics)
|
||||
|
||||
if s.sdManager == nil {
|
||||
return nil, errors.New("failed to create new discovery manager")
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
package sender
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log/slog"
|
||||
|
||||
"github.com/grafana/grafana/pkg/infra/log"
|
||||
)
|
||||
|
||||
// InfraLoggerHandler adapts infra's log.Logger to an slog.Handler
|
||||
type InfraLoggerHandler struct {
|
||||
infraLogger log.Logger
|
||||
}
|
||||
|
||||
type SlogAdapter struct {
|
||||
logger *slog.Logger
|
||||
}
|
||||
|
||||
// Log implements the Log method to satisfy the log.Logger interface.
|
||||
func (s *SlogAdapter) Log(keyvals ...interface{}) error {
|
||||
msg := ""
|
||||
args := []interface{}{}
|
||||
|
||||
// Extract message and attributes (customize as needed).
|
||||
if len(keyvals) > 0 {
|
||||
msg, _ = keyvals[0].(string)
|
||||
if len(keyvals) > 1 {
|
||||
args = keyvals[1:]
|
||||
}
|
||||
}
|
||||
|
||||
// Delegate to slog.Logger
|
||||
s.logger.Info(msg, args...)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Enabled determines if the log level is enabled
|
||||
func (h *InfraLoggerHandler) Enabled(_ context.Context, level slog.Level) bool {
|
||||
// Assume all levels are enabled; customize this based on infra's log.Logger
|
||||
return true
|
||||
}
|
||||
|
||||
// Handle processes a log record and routes it to infra's log.Logger
|
||||
func (h *InfraLoggerHandler) Handle(_ context.Context, record slog.Record) error {
|
||||
// Build the log message
|
||||
msg := record.Message
|
||||
args := []interface{}{}
|
||||
record.Attrs(func(a slog.Attr) bool {
|
||||
args = append(args, a.Key, a.Value.Any())
|
||||
return true
|
||||
})
|
||||
|
||||
// Route the log message to Infra's logger
|
||||
switch record.Level {
|
||||
case slog.LevelDebug:
|
||||
h.infraLogger.Debug(msg, args...)
|
||||
case slog.LevelInfo:
|
||||
h.infraLogger.Info(msg, args...)
|
||||
case slog.LevelWarn:
|
||||
h.infraLogger.Warn(msg, args...)
|
||||
case slog.LevelError:
|
||||
h.infraLogger.Error(msg, args...)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// WithAttrs adds attributes to the logger context
|
||||
func (h *InfraLoggerHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
|
||||
return h // Context attributes are ignored; implement if needed
|
||||
}
|
||||
|
||||
// WithGroup groups log records; not used here
|
||||
func (h *InfraLoggerHandler) WithGroup(name string) slog.Handler {
|
||||
return h // Grouping is ignored; implement if needed
|
||||
}
|
||||
|
||||
// toSlogLogger is a function to create *slog.Logger from Infra's log.Logger
|
||||
func toSlogLogger(infraLogger log.Logger) *slog.Logger {
|
||||
handler := &InfraLoggerHandler{infraLogger: infraLogger}
|
||||
return slog.New(handler)
|
||||
}
|
||||
Reference in New Issue
Block a user