@@ -14,6 +14,7 @@ import (
1414 "encoding/json"
1515 "errors"
1616 "fmt"
17+ "log/slog"
1718 "net/http"
1819 "net/http/pprof"
1920 "os"
@@ -25,7 +26,6 @@ import (
2526 "time"
2627
2728 "github.com/alecthomas/kingpin/v2"
28- "github.com/go-kit/log/level"
2929 "github.com/prometheus-community/windows_exporter/pkg/collector"
3030 "github.com/prometheus-community/windows_exporter/pkg/config"
3131 winlog "github.com/prometheus-community/windows_exporter/pkg/log"
@@ -137,24 +137,36 @@ func main() {
137137
138138 // Load values from configuration file(s). Executable flags must first be parsed, in order
139139 // to load the specified file(s).
140- kingpin .MustParse (app .Parse (os .Args [1 :]))
140+ if _ , err := app .Parse (os .Args [1 :]); err != nil {
141+ //nolint:sloglint // we do not have an logger yet
142+ slog .Error ("Failed to parse CLI args" ,
143+ slog .Any ("err" , err ),
144+ )
145+ os .Exit (1 )
146+ }
147+
141148 logger , err := winlog .New (winlogConfig )
142149 if err != nil {
143- _ = level .Error (logger ).Log ("err" , err )
150+ //nolint:sloglint // we do not have an logger yet
151+ slog .Error ("failed to create logger" ,
152+ slog .Any ("err" , err ),
153+ )
144154 os .Exit (1 )
145155 }
146156
147- _ = level .Debug (logger ).Log ("msg" , "Logging has Started" )
148-
149157 if * configFile != "" {
150158 resolver , err := config .NewResolver (* configFile , logger , * insecureSkipVerify )
151159 if err != nil {
152- _ = level .Error (logger ).Log ("msg" , "could not load config file" , "err" , err )
160+ logger .Error ("could not load config file" ,
161+ slog .Any ("err" , err ),
162+ )
153163 os .Exit (1 )
154164 }
155- err = resolver .Bind (app , os .Args [1 :])
156- if err != nil {
157- _ = level .Error (logger ).Log ("err" , err )
165+
166+ if err = resolver .Bind (app , os .Args [1 :]); err != nil {
167+ logger .Error ("Failed to bind configuration" ,
168+ slog .Any ("err" , err ),
169+ )
158170 os .Exit (1 )
159171 }
160172
@@ -164,15 +176,25 @@ func main() {
164176 * webConfig .WebListenAddresses = (* webConfig .WebListenAddresses )[1 :]
165177
166178 // Parse flags once more to include those discovered in configuration file(s).
167- kingpin .MustParse (app .Parse (os .Args [1 :]))
179+ if _ , err = app .Parse (os .Args [1 :]); err != nil {
180+ logger .Error ("Failed to parse CLI args from YAML file" ,
181+ slog .Any ("err" , err ),
182+ )
183+ os .Exit (1 )
184+ }
168185
169186 logger , err = winlog .New (winlogConfig )
170187 if err != nil {
171- _ = level .Error (logger ).Log ("err" , err )
188+ //nolint:sloglint // we do not have an logger yet
189+ slog .Error ("failed to create logger" ,
190+ slog .Any ("err" , err ),
191+ )
172192 os .Exit (1 )
173193 }
174194 }
175195
196+ logger .Debug ("Logging has Started" )
197+
176198 if * printCollectors {
177199 collectorNames := collector .Available ()
178200 sort .Strings (collectorNames )
@@ -187,10 +209,12 @@ func main() {
187209
188210 // Only set process priority if a non-default and valid value has been set
189211 if * processPriority != "normal" && priorityStringToInt [* processPriority ] != 0 {
190- _ = level .Debug (logger ). Log ( "msg" , " setting process priority to "+ * processPriority )
212+ logger .Debug (" setting process priority to " + * processPriority )
191213 err = setPriorityWindows (os .Getpid (), priorityStringToInt [* processPriority ])
192214 if err != nil {
193- _ = level .Error (logger ).Log ("msg" , "failed to set process priority" , "err" , err )
215+ logger .Error ("failed to set process priority" ,
216+ slog .Any ("err" , err ),
217+ )
194218 os .Exit (1 )
195219 }
196220 }
@@ -201,34 +225,39 @@ func main() {
201225 // Initialize collectors before loading
202226 err = collectors .Build (logger )
203227 if err != nil {
204- _ = level .Error (logger ).Log ("msg" , "Couldn't load collectors" , "err" , err )
228+ logger .Error ("Couldn't load collectors" ,
229+ slog .Any ("err" , err ),
230+ )
205231 os .Exit (1 )
206232 }
207233 err = collectors .SetPerfCounterQuery (logger )
208234 if err != nil {
209- _ = level .Error (logger ).Log ("msg" , "Couldn't set performance counter query" , "err" , err )
235+ logger .Error ("Couldn't set performance counter query" ,
236+ slog .Any ("err" , err ),
237+ )
210238 os .Exit (1 )
211239 }
212240
213241 if u , err := user .Current (); err != nil {
214- _ = level .Warn (logger ). Log ( "msg" , "Unable to determine which user is running this exporter. More info: https://github.com/golang/go/issues/37348" )
242+ logger .Warn ("Unable to determine which user is running this exporter. More info: https://github.com/golang/go/issues/37348" )
215243 } else {
216- _ = level .Info (logger ). Log ( "msg" , fmt . Sprintf ( " Running as %v" , u .Username ) )
244+ logger .Info (" Running as " + u .Username )
217245
218246 if strings .Contains (u .Username , "ContainerAdministrator" ) || strings .Contains (u .Username , "ContainerUser" ) {
219- _ = level .Warn (logger ). Log ( "msg" , "Running as a preconfigured Windows Container user. This may mean you do not have Windows HostProcess containers configured correctly and some functionality will not work as expected." )
247+ logger .Warn ("Running as a preconfigured Windows Container user. This may mean you do not have Windows HostProcess containers configured correctly and some functionality will not work as expected." )
220248 }
221249 }
222250
223- _ = level .Info (logger ). Log ( "msg" , fmt . Sprintf ( " Enabled collectors: %v" , strings .Join (enabledCollectorList , ", " ) ))
251+ logger .Info (" Enabled collectors: " + strings .Join (enabledCollectorList , ", " ))
224252
225253 mux := http .NewServeMux ()
226254 mux .HandleFunc ("GET " + * metricsPath , withConcurrencyLimit (* maxRequests , collectors .BuildServeHTTP (logger , * disableExporterMetrics , * timeoutMargin )))
227255 mux .HandleFunc ("GET /health" , func (w http.ResponseWriter , _ * http.Request ) {
228256 w .Header ().Set ("Content-Type" , "application/json" )
229- _ , err := fmt .Fprintln (w , `{"status":"ok"}` )
230- if err != nil {
231- _ = level .Debug (logger ).Log ("msg" , "Failed to write to stream" , "err" , err )
257+ if _ , err := fmt .Fprintln (w , `{"status":"ok"}` ); err != nil {
258+ logger .Debug ("Failed to write to stream" ,
259+ slog .Any ("err" , err ),
260+ )
232261 }
233262 })
234263 mux .HandleFunc ("GET /version" , func (w http.ResponseWriter , _ * http.Request ) {
@@ -255,9 +284,9 @@ func main() {
255284 mux .HandleFunc ("GET /debug/pprof/trace" , pprof .Trace )
256285 }
257286
258- _ = level .Info (logger ). Log ( "msg" , " Starting windows_exporter" , "version" , version .Info ())
259- _ = level .Info (logger ). Log ( "msg" , " Build context" , "build_context" , version .BuildContext ())
260- _ = level .Debug (logger ). Log ( "msg" , " Go MAXPROCS" , "procs" , runtime .GOMAXPROCS (0 ))
287+ logger .Info (" Starting windows_exporter" , slog . String ( "version" , version .Info () ))
288+ logger .Info (" Build context" , slog . String ( "build_context" , version .BuildContext () ))
289+ logger .Debug (" Go MAXPROCS" , slog . Int ( "procs" , runtime .GOMAXPROCS (0 ) ))
261290
262291 server := & http.Server {
263292 ReadHeaderTimeout : 5 * time .Second ,
@@ -269,7 +298,9 @@ func main() {
269298
270299 go func () {
271300 if err := web .ListenAndServe (server , webConfig , logger ); err != nil && ! errors .Is (err , http .ErrServerClosed ) {
272- _ = level .Error (logger ).Log ("msg" , "cannot start windows_exporter" , "err" , err )
301+ logger .Error ("cannot start windows_exporter" ,
302+ slog .Any ("err" , err ),
303+ )
273304 os .Exit (1 )
274305 }
275306 }()
@@ -279,17 +310,17 @@ func main() {
279310
280311 select {
281312 case <- ctx .Done ():
282- _ = level .Info (logger ). Log ( "msg" , "Shutting down windows_exporter via kill signal" )
313+ logger .Info ("Shutting down windows_exporter via kill signal" )
283314 case <- initiate .StopCh :
284- _ = level .Info (logger ). Log ( "msg" , "Shutting down windows_exporter via service control" )
315+ logger .Info ("Shutting down windows_exporter via service control" )
285316 }
286317
287318 ctx , cancel := context .WithTimeout (context .Background (), 5 * time .Second )
288319 defer cancel ()
289320
290321 _ = server .Shutdown (ctx )
291322
292- _ = level .Info (logger ). Log ( "msg" , "windows_exporter has shut down" )
323+ logger .Info ("windows_exporter has shut down" )
293324}
294325
295326func withConcurrencyLimit (n int , next http.HandlerFunc ) http.HandlerFunc {
0 commit comments