@@ -5,15 +5,17 @@ import (
55 "log/slog"
66 "os"
77
8- "github.com/golang/glog"
98 "github.com/spf13/cobra"
109
1110 "github.com/openshift-hyperfleet/hyperfleet-api/cmd/hyperfleet-api/environments"
1211 "github.com/openshift-hyperfleet/hyperfleet-api/cmd/hyperfleet-api/server"
12+ "github.com/openshift-hyperfleet/hyperfleet-api/pkg/api"
1313 "github.com/openshift-hyperfleet/hyperfleet-api/pkg/logger"
14+ "github.com/openshift-hyperfleet/hyperfleet-api/pkg/telemetry"
1415)
1516
1617func NewServeCommand () * cobra.Command {
18+ ctx := context .Background ()
1719 cmd := & cobra.Command {
1820 Use : "serve" ,
1921 Short : "Serve the hyperfleet" ,
@@ -22,31 +24,54 @@ func NewServeCommand() *cobra.Command {
2224 }
2325 err := environments .Environment ().AddFlags (cmd .PersistentFlags ())
2426 if err != nil {
25- glog .Fatalf ("Unable to add environment flags to serve command: %s" , err .Error ())
27+ logger .Error (ctx , "Unable to add environment flags to serve command" , "error" , err )
28+ os .Exit (1 )
2629 }
2730
2831 return cmd
2932}
3033
3134func runServe (cmd * cobra.Command , args []string ) {
35+ ctx := context .Background ()
36+
37+ // Initialize environment (loads configuration)
3238 err := environments .Environment ().Initialize ()
3339 if err != nil {
34- glog .Fatalf ("Unable to initialize environment: %s" , err .Error ())
40+ logger .Error (ctx , "Unable to initialize environment" , "error" , err )
41+ os .Exit (1 )
3542 }
3643
37- // Initialize slog logger (demonstration only, full migration in PR 3)
38- ctx := context .Background ()
39- hostname , _ := os .Hostname ()
40- logConfig := & logger.LogConfig {
41- Level : slog .LevelInfo ,
42- Format : logger .FormatJSON ,
43- Output : os .Stdout ,
44- Component : "api" ,
45- Version : "dev" ,
46- Hostname : hostname ,
44+ // Bind environment variables for advanced configuration (OTel, Masking)
45+ environments .Environment ().Config .Logging .BindEnv ()
46+
47+ // Initialize slog logger
48+ initLogger ()
49+
50+ // Initialize OpenTelemetry (if enabled)
51+ if environments .Environment ().Config .Logging .OTel .Enabled {
52+ samplingRate := environments .Environment ().Config .Logging .OTel .SamplingRate
53+ tp , err := telemetry .InitTraceProvider ("hyperfleet-api" , api .Version , samplingRate )
54+ if err != nil {
55+ logger .Warn (ctx , "Failed to initialize OpenTelemetry" , "error" , err )
56+ } else {
57+ defer func () {
58+ if err := telemetry .Shutdown (context .Background (), tp ); err != nil {
59+ logger .Error (ctx , "Failed to shutdown OpenTelemetry" , "error" , err )
60+ }
61+ }()
62+ logger .Info (ctx , "OpenTelemetry initialized" , "sampling_rate" , samplingRate )
63+ }
64+ } else {
65+ logger .Info (ctx , "OpenTelemetry disabled" , "otel_enabled" , false )
4766 }
48- logger .InitGlobalLogger (logConfig )
49- logger .Info (ctx , "New slog logger initialized (example)" , "log_level" , "info" , "log_format" , "json" )
67+
68+ // Log configuration
69+ logger .Info (ctx , "Logger initialized" ,
70+ "log_level" , environments .Environment ().Config .Logging .Level ,
71+ "log_format" , environments .Environment ().Config .Logging .Format ,
72+ "log_output" , environments .Environment ().Config .Logging .Output ,
73+ "masking_enabled" , environments .Environment ().Config .Logging .Masking .Enabled ,
74+ )
5075
5176 // Run the servers
5277 go func () {
@@ -66,3 +91,46 @@ func runServe(cmd *cobra.Command, args []string) {
6691
6792 select {}
6893}
94+
95+ // initLogger initializes the global slog logger from configuration
96+ func initLogger () {
97+ ctx := context .Background ()
98+ cfg := environments .Environment ().Config .Logging
99+
100+ // Parse log level
101+ level , err := logger .ParseLogLevel (cfg .Level )
102+ if err != nil {
103+ logger .Warn (ctx , "Invalid log level, using default" , "level" , cfg .Level , "error" , err )
104+ level = slog .LevelInfo // Default to info
105+ }
106+
107+ // Parse log format
108+ format , err := logger .ParseLogFormat (cfg .Format )
109+ if err != nil {
110+ logger .Warn (ctx , "Invalid log format, using default" , "format" , cfg .Format , "error" , err )
111+ format = logger .FormatJSON // Default to JSON
112+ }
113+
114+ // Parse log output
115+ output , err := logger .ParseLogOutput (cfg .Output )
116+ if err != nil {
117+ logger .Warn (ctx , "Invalid log output, using default" , "output" , cfg .Output , "error" , err )
118+ output = os .Stdout // Default to stdout
119+ }
120+
121+ // Get hostname
122+ hostname , _ := os .Hostname ()
123+
124+ // Create logger config
125+ logConfig := & logger.LogConfig {
126+ Level : level ,
127+ Format : format ,
128+ Output : output ,
129+ Component : "api" ,
130+ Version : api .Version ,
131+ Hostname : hostname ,
132+ }
133+
134+ // Initialize global logger
135+ logger .InitGlobalLogger (logConfig )
136+ }
0 commit comments