feat: build vehicle data platform and production pipeline
This commit is contained in:
@@ -3,11 +3,28 @@ 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})
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
27
go/vehicle-gateway/internal/observability/logger_test.go
Normal file
27
go/vehicle-gateway/internal/observability/logger_test.go
Normal file
@@ -0,0 +1,27 @@
|
||||
package observability
|
||||
|
||||
import (
|
||||
"log/slog"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestParseLogLevel(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
value string
|
||||
want slog.Level
|
||||
}{
|
||||
{name: "empty defaults to info", value: "", want: slog.LevelInfo},
|
||||
{name: "unknown defaults to info", value: "trace", want: slog.LevelInfo},
|
||||
{name: "debug", value: "debug", want: slog.LevelDebug},
|
||||
{name: "warn alias", value: "warning", want: slog.LevelWarn},
|
||||
{name: "error trims and lowercases", value: " ERROR ", want: slog.LevelError},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := parseLogLevel(tt.value); got != tt.want {
|
||||
t.Fatalf("parseLogLevel(%q) = %v, want %v", tt.value, got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user