From 4836dd8b0be10b461b93d711bb2cf78d186210d1 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sat, 05 Apr 2025 18:37:55 +0800 Subject: [PATCH] Use log/slog instead of clog --- git_hooks_handle_linux.go | 4 ++-- git_hooks_handle_other.go | 4 ++-- http_server.go | 4 ++-- http_template.go | 5 ++--- irc.go | 12 ++++++------ main.go | 80 +++++++++++++++++++++++++++++++++-------------------- ssh_server.go | 7 ++++--- diff --git a/git_hooks_handle_linux.go b/git_hooks_handle_linux.go index 3c556c3ab95d7feb87bca5c606bcdcfdf5e32f53..440bd46741b0a00b04a44da053c3d23b8d47bf43 100644 --- a/git_hooks_handle_linux.go +++ b/git_hooks_handle_linux.go @@ -12,6 +12,7 @@ "encoding/binary" "errors" "fmt" "io" + "log/slog" "net" "os" "path/filepath" @@ -24,7 +25,6 @@ "github.com/go-git/go-git/v5/plumbing/object" "github.com/jackc/pgx/v5" "go.lindenii.runxiyu.org/forge/misc" "go.lindenii.runxiyu.org/lindenii-common/ansiec" - "go.lindenii.runxiyu.org/lindenii-common/clog" ) var ( @@ -253,7 +253,7 @@ select { case ircSendBuffered <- "PRIVMSG #chat :New merge request at " + mergeRequestWebURL: default: - clog.Error("IRC SendQ exceeded") + slog.Error("IRC SendQ exceeded") } } else { // Existing contrib branch var existingMRUser int diff --git a/git_hooks_handle_other.go b/git_hooks_handle_other.go index 89a4193e4637d671736ece7e2eebcab673535c45..d0c7088a5c7a12455a90e1bb135f5c792bdc4e5e 100644 --- a/git_hooks_handle_other.go +++ b/git_hooks_handle_other.go @@ -12,6 +12,7 @@ "encoding/binary" "errors" "fmt" "io" + "log/slog" "net" "path/filepath" "strconv" @@ -22,7 +23,6 @@ "github.com/go-git/go-git/v5/plumbing/object" "github.com/jackc/pgx/v5" "go.lindenii.runxiyu.org/forge/misc" "go.lindenii.runxiyu.org/lindenii-common/ansiec" - "go.lindenii.runxiyu.org/lindenii-common/clog" ) var errGetFD = errors.New("unable to get file descriptor") @@ -231,7 +231,7 @@ select { case ircSendBuffered <- "PRIVMSG #chat :New merge request at " + mergeRequestWebURL: default: - clog.Error("IRC SendQ exceeded") + slog.Error("IRC SendQ exceeded") } } else { // Existing contrib branch var existingMRUser int diff --git a/http_server.go b/http_server.go index 7268ad0ade8cacbefb158d553660bf5b9148eeac..5d45d00df0e5e31a70a99464c632d41ab3a278b0 100644 --- a/http_server.go +++ b/http_server.go @@ -5,13 +5,13 @@ package main import ( "errors" + "log/slog" "net/http" "net/url" "strconv" "strings" "github.com/jackc/pgx/v5" - "go.lindenii.runxiyu.org/lindenii-common/clog" ) type forgeHTTPRouter struct{} @@ -32,7 +32,7 @@ } } else { remoteAddr = request.RemoteAddr } - clog.Info("Incoming HTTP: " + remoteAddr + " " + request.Method + " " + request.RequestURI) + slog.Info("incoming http", "addr", remoteAddr, "method", request.Method, "uri", request.RequestURI) var segments []string var err error diff --git a/http_template.go b/http_template.go index c1f5fc4aaa93e25cecab4748a525e1d7d24bd5c0..9aa15cb92375caa0a42b01452972c24c7a4f38d5 100644 --- a/http_template.go +++ b/http_template.go @@ -4,9 +4,8 @@ package main import ( + "log/slog" "net/http" - - "go.lindenii.runxiyu.org/lindenii-common/clog" ) // renderTemplate abstracts out the annoyances of reporting template rendering @@ -14,6 +13,6 @@ // errors. func renderTemplate(w http.ResponseWriter, templateName string, params map[string]any) { if err := templates.ExecuteTemplate(w, templateName, params); err != nil { http.Error(w, "error rendering template: "+err.Error(), http.StatusInternalServerError) - clog.Error(err.Error()) + slog.Error("error rendering template", "error", err.Error()) } } diff --git a/irc.go b/irc.go index 073bfad84f55e7ff7c842d12f661932750ba9437..868fc052d85fe98c9fd2bc58645232922756dc46 100644 --- a/irc.go +++ b/irc.go @@ -5,9 +5,9 @@ package main import ( "crypto/tls" + "log/slog" "net" - "go.lindenii.runxiyu.org/lindenii-common/clog" irc "go.lindenii.runxiyu.org/lindenii-irc" ) @@ -37,7 +37,7 @@ conn := irc.NewConn(underlyingConn) logAndWriteLn := func(s string) (n int, err error) { - clog.Debug("IRC tx: " + s) + slog.Debug("irc tx", "line", s) return conn.WriteString(s + "\r\n") } @@ -66,7 +66,7 @@ readLoopError <- err return } - clog.Debug("IRC rx: " + line) + slog.Debug("irc rx", "line", line) switch msg.Command { case "001": @@ -84,7 +84,7 @@ } case "JOIN": c, ok := msg.Source.(irc.Client) if !ok { - clog.Error("IRC server told us a non-client is joining a channel...") + slog.Error("unable to convert source of JOIN to client") } if c.Nick != config.IRC.Nick { continue @@ -104,7 +104,7 @@ if err != nil { select { case ircSendBuffered <- line: default: - clog.Error("unable to requeue IRC message: " + line) + slog.Error("unable to requeue message", "line", line) } writeLoopAbort <- struct{}{} return err @@ -140,6 +140,6 @@ ircSendDirectChan = make(chan errorBack[string]) for { err := ircBotSession() - clog.Error("IRC error: " + err.Error()) + slog.Error("irc session error", "error", err) } } diff --git a/main.go b/main.go index 49164d2786e19834e4610f594ec5babb6c759c6b..de014173b56cd77b283007035ab044cefb55319a 100644 --- a/main.go +++ b/main.go @@ -7,13 +7,13 @@ import ( "errors" "flag" "log" + "log/slog" "net" "net/http" + "os" "os/exec" "syscall" "time" - - "go.lindenii.runxiyu.org/lindenii-common/clog" ) func main() { @@ -25,16 +25,20 @@ ) flag.Parse() if err := loadConfig(*configPath); err != nil { - clog.Fatal(1, "Loading configuration: "+err.Error()) + slog.Error("loading configuration", "error", err) + os.Exit(1) } if err := deployHooks(); err != nil { - clog.Fatal(1, "Deploying hooks to filesystem: "+err.Error()) + slog.Error("deploying hooks", "error", err) + os.Exit(1) } if err := loadTemplates(); err != nil { - clog.Fatal(1, "Loading templates: "+err.Error()) + slog.Error("loading templates", "error", err) + os.Exit(1) } if err := deployGit2D(); err != nil { - clog.Fatal(1, "Deploying git2d: "+err.Error()) + slog.Error("deploying git2d", "error", err) + os.Exit(1) } // Launch Git2D @@ -51,20 +55,24 @@ // UNIX socket listener for hooks { hooksListener, err := net.Listen("unix", config.Hooks.Socket) if errors.Is(err, syscall.EADDRINUSE) { - clog.Warn("Removing existing socket " + config.Hooks.Socket) + slog.Warn("removing existing socket", "path", config.Hooks.Socket) if err = syscall.Unlink(config.Hooks.Socket); err != nil { - clog.Fatal(1, "Removing existing socket: "+err.Error()) + slog.Error("removing existing socket", "path", config.Hooks.Socket, "error", err) + os.Exit(1) } if hooksListener, err = net.Listen("unix", config.Hooks.Socket); err != nil { - clog.Fatal(1, "Listening hooks: "+err.Error()) + slog.Error("listening hooks", "error", err) + os.Exit(1) } } else if err != nil { - clog.Fatal(1, "Listening hooks: "+err.Error()) + slog.Error("listening hooks", "error", err) + os.Exit(1) } - clog.Info("Listening hooks on unix " + config.Hooks.Socket) + slog.Info("listening hooks on unix", "path", config.Hooks.Socket) go func() { if err = serveGitHooks(hooksListener); err != nil { - clog.Fatal(1, "Serving hooks: "+err.Error()) + slog.Error("serving hooks", "error", err) + os.Exit(1) } }() } @@ -73,20 +81,24 @@ // UNIX socket listener for LMTP { lmtpListener, err := net.Listen("unix", config.LMTP.Socket) if errors.Is(err, syscall.EADDRINUSE) { - clog.Warn("Removing existing socket " + config.LMTP.Socket) + slog.Warn("removing existing socket", "path", config.LMTP.Socket) if err = syscall.Unlink(config.LMTP.Socket); err != nil { - clog.Fatal(1, "Removing existing socket: "+err.Error()) + slog.Error("removing existing socket", "path", config.LMTP.Socket, "error", err) + os.Exit(1) } if lmtpListener, err = net.Listen("unix", config.LMTP.Socket); err != nil { - clog.Fatal(1, "Listening LMTP: "+err.Error()) + slog.Error("listening LMTP", "error", err) + os.Exit(1) } } else if err != nil { - clog.Fatal(1, "Listening LMTP: "+err.Error()) + slog.Error("listening LMTP", "error", err) + os.Exit(1) } - clog.Info("Listening LMTP on unix " + config.LMTP.Socket) + slog.Info("listening LMTP on unix", "path", config.LMTP.Socket) go func() { if err = serveLMTP(lmtpListener); err != nil { - clog.Fatal(1, "Serving LMTP: "+err.Error()) + slog.Error("serving LMTP", "error", err) + os.Exit(1) } }() } @@ -95,20 +107,24 @@ // SSH listener { sshListener, err := net.Listen(config.SSH.Net, config.SSH.Addr) if errors.Is(err, syscall.EADDRINUSE) && config.SSH.Net == "unix" { - clog.Warn("Removing existing socket " + config.SSH.Addr) + slog.Warn("removing existing socket", "path", config.SSH.Addr) if err = syscall.Unlink(config.SSH.Addr); err != nil { - clog.Fatal(1, "Removing existing socket: "+err.Error()) + slog.Error("removing existing socket", "path", config.SSH.Addr, "error", err) + os.Exit(1) } if sshListener, err = net.Listen(config.SSH.Net, config.SSH.Addr); err != nil { - clog.Fatal(1, "Listening SSH: "+err.Error()) + slog.Error("listening SSH", "error", err) + os.Exit(1) } } else if err != nil { - clog.Fatal(1, "Listening SSH: "+err.Error()) + slog.Error("listening SSH", "error", err) + os.Exit(1) } - clog.Info("Listening SSH on " + config.SSH.Net + " " + config.SSH.Addr) + slog.Info("listening SSH on", "net", config.SSH.Net, "addr", config.SSH.Addr) go func() { if err = serveSSH(sshListener); err != nil { - clog.Fatal(1, "Serving SSH: "+err.Error()) + slog.Error("serving SSH", "error", err) + os.Exit(1) } }() } @@ -117,15 +133,18 @@ // HTTP listener { httpListener, err := net.Listen(config.HTTP.Net, config.HTTP.Addr) if errors.Is(err, syscall.EADDRINUSE) && config.HTTP.Net == "unix" { - clog.Warn("Removing existing socket " + config.HTTP.Addr) + slog.Warn("removing existing socket", "path", config.HTTP.Addr) if err = syscall.Unlink(config.HTTP.Addr); err != nil { - clog.Fatal(1, "Removing existing socket: "+err.Error()) + slog.Error("removing existing socket", "path", config.HTTP.Addr, "error", err) + os.Exit(1) } if httpListener, err = net.Listen(config.HTTP.Net, config.HTTP.Addr); err != nil { - clog.Fatal(1, "Listening HTTP: "+err.Error()) + slog.Error("listening HTTP", "error", err) + os.Exit(1) } } else if err != nil { - clog.Fatal(1, "Listening HTTP: "+err.Error()) + slog.Error("listening HTTP", "error", err) + os.Exit(1) } server := http.Server{ Handler: &forgeHTTPRouter{}, @@ -133,10 +152,11 @@ ReadTimeout: time.Duration(config.HTTP.ReadTimeout) * time.Second, WriteTimeout: time.Duration(config.HTTP.ReadTimeout) * time.Second, IdleTimeout: time.Duration(config.HTTP.ReadTimeout) * time.Second, } //exhaustruct:ignore - clog.Info("Listening HTTP on " + config.HTTP.Net + " " + config.HTTP.Addr) + slog.Info("listening HTTP on", "net", config.HTTP.Net, "addr", config.HTTP.Addr) go func() { if err = server.Serve(httpListener); err != nil && !errors.Is(err, http.ErrServerClosed) { - clog.Fatal(1, "Serving HTTP: "+err.Error()) + slog.Error("serving HTTP", "error", err) + os.Exit(1) } }() } diff --git a/ssh_server.go b/ssh_server.go index 1408a2a02177f972b642d54e23ee9805eb5d95ff..345d47fc85c50adb0448ec19ac9fa44d45b87b6e 100644 --- a/ssh_server.go +++ b/ssh_server.go @@ -5,6 +5,7 @@ package main import ( "fmt" + "log/slog" "net" "os" "strings" @@ -12,7 +13,6 @@ gliderSSH "github.com/gliderlabs/ssh" "go.lindenii.runxiyu.org/forge/misc" "go.lindenii.runxiyu.org/lindenii-common/ansiec" - "go.lindenii.runxiyu.org/lindenii-common/clog" goSSH "golang.org/x/crypto/ssh" ) @@ -51,7 +51,7 @@ if clientPubkey != nil { clientPubkeyStr = strings.TrimSuffix(misc.BytesToString(goSSH.MarshalAuthorizedKey(clientPubkey)), "\n") } - clog.Info("Incoming SSH: " + session.RemoteAddr().String() + " " + clientPubkeyStr + " " + session.RawCommand()) + slog.Info("incoming ssh", "addr", session.RemoteAddr().String(), "key", clientPubkeyStr, "command", session.RawCommand()) fmt.Fprintln(session.Stderr(), ansiec.Blue+"Lindenii Forge "+VERSION+", source at "+strings.TrimSuffix(config.HTTP.Root, "/")+"/-/source/"+ansiec.Reset+"\r") cmd := session.Command() @@ -94,7 +94,8 @@ server.AddHostKey(hostKey) if err = server.Serve(listener); err != nil { - clog.Fatal(1, "Serving SSH: "+err.Error()) + slog.Error("error serving SSH", "error", err.Error()) + os.Exit(1) } return nil -- 2.48.1