From a80376972cae263fdf72a3cc15a609021291c992 Mon Sep 17 00:00:00 2001 From: ryan Date: Sat, 30 May 2026 12:27:00 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BC=98=E5=8C=96]=20=E4=BD=BF=E7=94=A8=20slo?= =?UTF-8?q?g=20=E6=9B=BF=E4=BB=A3=20fmt=20=E8=BF=9B=E8=A1=8C=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- openflare_agent/internal/logging/logger.go | 112 +----------------- .../internal/updater/restart_unix.go | 25 +++- openflare_server/common/init.go | 11 +- 3 files changed, 30 insertions(+), 118 deletions(-) diff --git a/openflare_agent/internal/logging/logger.go b/openflare_agent/internal/logging/logger.go index a25227af..f8a2e762 100644 --- a/openflare_agent/internal/logging/logger.go +++ b/openflare_agent/internal/logging/logger.go @@ -1,76 +1,20 @@ package logging import ( - "context" - "fmt" - "io" "log/slog" "os" - "path/filepath" - "runtime" - "slices" "strings" ) -type customTextHandler struct { - writer io.Writer - level slog.Level - attrs []slog.Attr - groups []string -} - func Setup() { - handler := &customTextHandler{ - writer: os.Stdout, - level: parseLevel(os.Getenv("LOG_LEVEL")), + opts := &slog.HandlerOptions{ + AddSource: true, + Level: parseLevel(os.Getenv("LOG_LEVEL")), } + handler := slog.NewTextHandler(os.Stdout, opts) slog.SetDefault(slog.New(handler)) } -func (h *customTextHandler) Enabled(_ context.Context, level slog.Level) bool { - return level >= h.level -} - -func (h *customTextHandler) Handle(_ context.Context, record slog.Record) error { - var builder strings.Builder - builder.WriteString(record.Time.Format("2006-01-02 15:04:05.000")) - builder.WriteString(" | ") - builder.WriteString(fmt.Sprintf("%-8s", levelLabel(record.Level))) - builder.WriteString(" | ") - builder.WriteString(sourceLocation(record.PC)) - builder.WriteString(" - ") - builder.WriteString(record.Message) - - attrs := make([]slog.Attr, 0, len(h.attrs)+record.NumAttrs()) - attrs = append(attrs, h.attrs...) - record.Attrs(func(attr slog.Attr) bool { - attrs = append(attrs, attr) - return true - }) - if len(attrs) > 0 { - builder.WriteString(" | ") - builder.WriteString(formatAttrs(h.groups, attrs)) - } - builder.WriteByte('\n') - _, err := io.WriteString(h.writer, builder.String()) - return err -} - -func (h *customTextHandler) WithAttrs(attrs []slog.Attr) slog.Handler { - cloned := *h - cloned.attrs = append(slices.Clone(h.attrs), attrs...) - return &cloned -} - -func (h *customTextHandler) WithGroup(name string) slog.Handler { - if strings.TrimSpace(name) == "" { - return h - } - cloned := *h - cloned.groups = append(slices.Clone(h.groups), name) - return &cloned -} - func parseLevel(value string) slog.Level { switch strings.ToLower(strings.TrimSpace(value)) { case "debug": @@ -83,51 +27,3 @@ func parseLevel(value string) slog.Level { return slog.LevelInfo } } - -func levelLabel(level slog.Level) string { - switch { - case level <= slog.LevelDebug: - return "DEBUG" - case level < slog.LevelWarn: - return "INFO" - case level < slog.LevelError: - return "WARNING" - default: - return "ERROR" - } -} - -func sourceLocation(pc uintptr) string { - if pc == 0 { - return "unknown:unknown:0" - } - frame, _ := runtime.CallersFrames([]uintptr{pc}).Next() - fileName := strings.TrimSuffix(filepath.Base(frame.File), filepath.Ext(frame.File)) - if fileName == "" { - fileName = "unknown" - } - functionName := "unknown" - if frame.Function != "" { - parts := strings.Split(frame.Function, "/") - functionName = parts[len(parts)-1] - if dot := strings.LastIndex(functionName, "."); dot >= 0 && dot < len(functionName)-1 { - functionName = functionName[dot+1:] - } - } - return fmt.Sprintf("%s:%s:%d", fileName, functionName, frame.Line) -} - -func formatAttrs(groups []string, attrs []slog.Attr) string { - parts := make([]string, 0, len(attrs)) - for _, attr := range attrs { - key := attr.Key - if key == "" { - continue - } - if len(groups) > 0 { - key = strings.Join(append(slices.Clone(groups), key), ".") - } - parts = append(parts, fmt.Sprintf("%s=%v", key, attr.Value.Any())) - } - return strings.Join(parts, " ") -} diff --git a/openflare_agent/internal/updater/restart_unix.go b/openflare_agent/internal/updater/restart_unix.go index 236d2604..16350a7e 100644 --- a/openflare_agent/internal/updater/restart_unix.go +++ b/openflare_agent/internal/updater/restart_unix.go @@ -4,22 +4,39 @@ package updater import ( "fmt" + "log/slog" "os" "syscall" ) func replaceAndRestart(execPath string, tmpPath string) error { backupPath := execPath + ".bak" - os.Remove(backupPath) + err := os.Remove(backupPath) + if err != nil { + slog.Error("remove backup binary failed", "path", backupPath, "error", err) + return err + } if err := os.Rename(execPath, backupPath); err != nil { - os.Remove(tmpPath) + err := os.Remove(tmpPath) + if err != nil { + slog.Error("remove tmp binary failed", "path", tmpPath, "error", err) + return err + } return fmt.Errorf("backup current binary: %w", err) } if err := os.Rename(tmpPath, execPath); err != nil { - os.Rename(backupPath, execPath) + err := os.Rename(backupPath, execPath) + if err != nil { + slog.Error("restore backup binary failed", "path", backupPath, "error", err) + return err + } return fmt.Errorf("replace binary: %w", err) } - os.Remove(backupPath) + err = os.Remove(backupPath) + if err != nil { + slog.Error("remove backup binary failed", "path", backupPath, "error", err) + return err + } if err := syscall.Exec(execPath, os.Args, os.Environ()); err != nil { return fmt.Errorf("exec restart: %w", err) } diff --git a/openflare_server/common/init.go b/openflare_server/common/init.go index f5a029f1..0763b426 100644 --- a/openflare_server/common/init.go +++ b/openflare_server/common/init.go @@ -2,7 +2,6 @@ package common import ( "flag" - "fmt" "log/slog" "os" "path/filepath" @@ -20,10 +19,10 @@ var ( var UploadPath = "upload" func printHelp() { - fmt.Println("OpenFlare " + Version + " - Internal OpenResty Control Plane.") - fmt.Println("Copyright (C) 2023 JustSong. All rights reserved.") - fmt.Println("GitHub: https://github.com/Rain-kl/OpenFlare") - fmt.Println("Usage: openflare [--port ] [--log-dir ] [--version] [--help]") + slog.Info("OpenFlare " + Version + " - Internal OpenResty Control Plane.") + slog.Info("Copyright (C) 2023 JustSong. All rights reserved.") + slog.Info("GitHub: https://github.com/Rain-kl/OpenFlare") + slog.Info("Usage: openflare [--port ] [--log-dir ] [--version] [--help]") } func init() { @@ -33,7 +32,7 @@ func init() { } if *PrintVersion { - fmt.Println(Version) + slog.Info(Version) os.Exit(0) }