31 lines
728 B
Go
31 lines
728 B
Go
package observability
|
|
|
|
import (
|
|
"log/slog"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
// NewLogger returns a JSON logger with a stable service field so ECS logs from
|
|
// different Go processes can be filtered without relying on container names.
|
|
func NewLogger(service string) *slog.Logger {
|
|
handler := slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
|
|
AddSource: true,
|
|
Level: parseLogLevel(os.Getenv("LOG_LEVEL")),
|
|
})
|
|
return slog.New(handler).With("service", service)
|
|
}
|
|
|
|
func parseLogLevel(value string) slog.Level {
|
|
switch strings.ToLower(strings.TrimSpace(value)) {
|
|
case "debug":
|
|
return slog.LevelDebug
|
|
case "warn", "warning":
|
|
return slog.LevelWarn
|
|
case "error":
|
|
return slog.LevelError
|
|
default:
|
|
return slog.LevelInfo
|
|
}
|
|
}
|