feat: add os info logging

This commit is contained in:
SunBK201 2025-11-23 01:33:55 +08:00
parent df5c4d9efe
commit 422765cf95

View File

@ -9,6 +9,7 @@ import (
"time"
"github.com/sunbk201/ua3f/internal/config"
"golang.org/x/sys/unix"
"gopkg.in/natefinch/lumberjack.v2"
)
@ -58,7 +59,7 @@ func SetLogConf(level string) {
func LogHeader(version string, cfg *config.Config) {
slog.Info("UA3F started", "version", version, "", cfg)
slog.Info("System Info", slog.String("Go Version", strings.TrimPrefix(strings.TrimSpace(runtime.Version()), "go")), slog.String("OS/Arch", runtime.GOOS+"/"+runtime.GOARCH))
slog.Info("OS Info", GetOSInfo()...)
}
func LogDebugWithAddr(src string, dest string, msg string) {
@ -99,6 +100,51 @@ func LoadLocalLocation() *time.Location {
return time.UTC
}
func GetOSInfo() (attrs []any) {
attrs = append(attrs,
slog.String("GOOS", runtime.GOOS),
slog.String("GOARCH", runtime.GOARCH),
slog.String("Go Version", runtime.Version()),
)
if hostname, err := os.Hostname(); err == nil {
attrs = append(attrs, slog.String("hostname", hostname))
}
switch runtime.GOOS {
case "linux", "darwin", "freebsd", "openbsd", "netbsd":
var uname unix.Utsname
if err := unix.Uname(&uname); err == nil {
toStr := func(b []byte) string {
n := 0
for ; n < len(b); n++ {
if b[n] == 0 {
break
}
}
return strings.TrimSpace(string(b[:n]))
}
attrs = append(attrs,
slog.String("sysname", toStr(uname.Sysname[:])),
slog.String("nodename", toStr(uname.Nodename[:])),
slog.String("release", toStr(uname.Release[:])),
slog.String("version", toStr(uname.Version[:])),
slog.String("machine", toStr(uname.Machine[:])),
)
}
case "windows":
osver := "unknown"
if v, ok := os.LookupEnv("OS"); ok {
osver = v
}
attrs = append(attrs, slog.String("os_version", osver))
default:
attrs = append(attrs, slog.String("info", "unknown OS details"))
}
return attrs
}
func trim(s string) string {
for len(s) > 0 && (s[len(s)-1] == '\n' || s[len(s)-1] == '\r' || s[len(s)-1] == ' ') {
s = s[:len(s)-1]