mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-09-28 02:02:08 +03:00
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:
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user