From ee7eeea2267751cfbbb47c0c57c33ef9ae361fb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Otto=20Kr=C3=B6pke?= Date: Tue, 18 Feb 2025 15:20:49 +0100 Subject: [PATCH] fix: log to the Windows temp directory if of service detection failures. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jan-Otto Kröpke --- cmd/windows_exporter/0_service.go | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/cmd/windows_exporter/0_service.go b/cmd/windows_exporter/0_service.go index 37ac74087..3e70b820d 100644 --- a/cmd/windows_exporter/0_service.go +++ b/cmd/windows_exporter/0_service.go @@ -56,8 +56,7 @@ var IsService = func() bool { isService, err := svc.IsWindowsService() if err != nil { - //nolint:gosec - _ = os.WriteFile("C:\\Program Files\\windows_exporter\\start-service.error.log", []byte(fmt.Sprintf("failed to detect service: %v", err)), 0o644) + logToFile(fmt.Sprintf("failed to detect service: %v", err)) return false } @@ -70,7 +69,9 @@ var IsService = func() bool { go func() { err := svc.Run(serviceName, &windowsExporterService{}) if err != nil { - _ = logToEventToLog(windows.EVENTLOG_ERROR_TYPE, fmt.Sprintf("failed to start service: %v", err)) + if logErr := logToEventToLog(windows.EVENTLOG_ERROR_TYPE, fmt.Sprintf("failed to start service: %v", err)); logErr != nil { + logToFile(fmt.Sprintf("failed to start service: %v", err)) + } } serviceManagerFinishedCh <- struct{}{} @@ -78,8 +79,7 @@ var IsService = func() bool { }() if err := logToEventToLog(windows.EVENTLOG_INFORMATION_TYPE, "attempting to start exporter service"); err != nil { - //nolint:gosec - _ = os.WriteFile("C:\\Program Files\\windows_exporter\\start-service.error.log", []byte(fmt.Sprintf("failed sent log to event log: %v", err)), 0o644) + logToFile(fmt.Sprintf("failed sent log to event log: %v", err)) exitCodeCh <- 2 } @@ -149,3 +149,10 @@ func logToEventToLog(eType uint16, msg string) error { return nil } + +func logToFile(msg string) { + if file, err := os.CreateTemp("", "windows_exporter.service.error.log"); err == nil { + _, _ = file.WriteString(msg) + _ = file.Close() + } +}