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.
This commit is contained in:
MHSanaei
2026-09-27 15:05:01 +02:00
parent 7aa5fc085f
commit a579357343
3 changed files with 36 additions and 22 deletions
+20
View File
@@ -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
View File
@@ -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
View File
@@ -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))
}