mirror of
https://github.com/syntrex-lab/gomcp.git
synced 2026-04-26 12:56:21 +02:00
57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
// Package logging provides structured logging via Go's log/slog.
|
|
// Production: JSON output. Development: text output with colors.
|
|
//
|
|
// Usage:
|
|
//
|
|
// logger := logging.New("json", "info") // production
|
|
// logger := logging.New("text", "debug") // development
|
|
// logger.Info("event ingested", "event_id", id, "source", src)
|
|
package logging
|
|
|
|
import (
|
|
"io"
|
|
"log/slog"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
// New creates a structured logger.
|
|
// format: "json" (production) or "text" (development).
|
|
// level: "debug", "info", "warn", "error".
|
|
func New(format, level string) *slog.Logger {
|
|
return NewWithOutput(format, level, os.Stdout)
|
|
}
|
|
|
|
// NewWithOutput creates a logger writing to the given writer.
|
|
func NewWithOutput(format, level string, w io.Writer) *slog.Logger {
|
|
lvl := parseLevel(level)
|
|
opts := &slog.HandlerOptions{Level: lvl}
|
|
|
|
var handler slog.Handler
|
|
switch strings.ToLower(format) {
|
|
case "json":
|
|
handler = slog.NewJSONHandler(w, opts)
|
|
default:
|
|
handler = slog.NewTextHandler(w, opts)
|
|
}
|
|
|
|
return slog.New(handler)
|
|
}
|
|
|
|
// WithComponent returns a logger with a "component" attribute.
|
|
func WithComponent(logger *slog.Logger, component string) *slog.Logger {
|
|
return logger.With("component", component)
|
|
}
|
|
|
|
func parseLevel(s string) slog.Level {
|
|
switch strings.ToLower(s) {
|
|
case "debug":
|
|
return slog.LevelDebug
|
|
case "warn", "warning":
|
|
return slog.LevelWarn
|
|
case "error":
|
|
return slog.LevelError
|
|
default:
|
|
return slog.LevelInfo
|
|
}
|
|
}
|