Преглед на файлове

refactor(logger): choose the console backend with build tags

The runtime.GOOS switch compiled the syslog branch into Windows builds,
where go-logging's syslog stub always returns an error. staticcheck
therefore reported SA4023 at logger.go:95 on every Windows lint run,
keeping `make lint-go` red on a clean main there while Linux CI never
saw it. console_windows.go and console_other.go now pick the backend at
build time, with each platform's behaviour unchanged.

No test can observe build-tag selection: `golangci-lint run` on Windows
goes from 1 issue to 0, and `GOOS=linux golangci-lint run
./internal/logger/...` stays clean.
MHSanaei преди 7 часа
родител
ревизия
a579357343
променени са 3 файла, в които са добавени 36 реда и са изтрити 22 реда
  1. 20 0
      internal/logger/console_other.go
  2. 14 0
      internal/logger/console_windows.go
  3. 2 22
      internal/logger/logger.go

+ 20 - 0
internal/logger/console_other.go

@@ -0,0 +1,20 @@
+//go:build !windows
+
+package logger
+
+import (
+	"fmt"
+	"os"
+
+	"github.com/op/go-logging"
+)
+
+// newConsoleBackend prefers syslog and falls back to stderr when it is unavailable.
+func newConsoleBackend() (backend logging.Backend, includeTime bool) {
+	syslogBackend, err := logging.NewSyslogBackend("")
+	if err == nil {
+		return syslogBackend, false
+	}
+	fmt.Fprintf(os.Stderr, "syslog backend disabled: %v\n", err)
+	return logging.NewLogBackend(os.Stderr, "", 0), os.Getppid() > 0
+}

+ 14 - 0
internal/logger/console_windows.go

@@ -0,0 +1,14 @@
+//go:build windows
+
+package logger
+
+import (
+	"os"
+
+	"github.com/op/go-logging"
+)
+
+// newConsoleBackend logs to stderr: go-logging has no syslog on Windows.
+func newConsoleBackend() (backend logging.Backend, includeTime bool) {
+	return logging.NewLogBackend(os.Stderr, "", 0), true
+}

+ 2 - 22
internal/logger/logger.go

@@ -6,7 +6,6 @@ import (
 	"fmt"
 	"os"
 	"path/filepath"
-	"runtime"
 	"sync"
 	"sync/atomic"
 	"time"
@@ -79,28 +78,9 @@ func InitLogger(level logging.Level) {
 	logger.Store(newLogger)
 }
 
-// initDefaultBackend creates the console/syslog logging backend.
-// Windows: Uses stderr directly (no syslog support)
-// Unix-like: Attempts syslog, falls back to stderr
+// initDefaultBackend creates the console logging backend: syslog where the platform has it, else stderr.
 func initDefaultBackend() logging.Backend {
-	var backend logging.Backend
-	includeTime := false
-
-	if runtime.GOOS == "windows" {
-		// Windows: Use stderr directly (no syslog support)
-		backend = logging.NewLogBackend(os.Stderr, "", 0)
-		includeTime = true
-	} else {
-		// Unix-like: Try syslog, fallback to stderr
-		if syslogBackend, err := logging.NewSyslogBackend(""); err != nil {
-			fmt.Fprintf(os.Stderr, "syslog backend disabled: %v\n", err)
-			backend = logging.NewLogBackend(os.Stderr, "", 0)
-			includeTime = os.Getppid() > 0
-		} else {
-			backend = syslogBackend
-		}
-	}
-
+	backend, includeTime := newConsoleBackend()
 	return logging.NewBackendFormatter(backend, newFormatter(includeTime))
 }