From bd6b87c2e59a481b3b5d490c2eb3c58f87aa275b Mon Sep 17 00:00:00 2001 From: feiniks <36756310+feiniks@users.noreply.github.com> Date: Tue, 12 Mar 2024 22:47:43 +0800 Subject: [PATCH] Support error log rotate and notification log rotate (#649) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Support error log rotate and notification log rotate * Add comment * Modify log name --------- Co-authored-by: 杨赫然 --- fileserver/fileserver.go | 14 +++++++++-- notification-server/server.go | 44 +++++++++++++++++++++++++++++++++-- 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/fileserver/fileserver.go b/fileserver/fileserver.go index 9b84ec90..a1d044f6 100644 --- a/fileserver/fileserver.go +++ b/fileserver/fileserver.go @@ -363,6 +363,8 @@ func main() { log.Fatalf("Failed to open or create error log file: %v", err) } syscall.Dup3(int(fp.Fd()), int(os.Stderr.Fd()), 0) + // We need to close the old fp, because it has beed duped. + fp.Close() } repomgr.Init(seafileDB) @@ -390,7 +392,7 @@ func main() { router := newHTTPRouter() go handleSignals() - go handleUser1Singal() + go handleUser1Signal() log.Print("Seafile file server started.") @@ -409,7 +411,7 @@ func handleSignals() { os.Exit(0) } -func handleUser1Singal() { +func handleUser1Signal() { signalChan := make(chan os.Signal, 1) signal.Notify(signalChan, syscall.SIGUSR1) <-signalChan @@ -433,6 +435,14 @@ func logRotate() { logFp.Close() logFp = fp } + + errorLogFile := filepath.Join(filepath.Dir(absLogFile), "fileserver-error.log") + errFp, err := os.OpenFile(errorLogFile, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644) + if err != nil { + log.Fatalf("Failed to reopen fileserver error log: %v", err) + } + syscall.Dup3(int(errFp.Fd()), int(os.Stderr.Fd()), 0) + errFp.Close() } var rpcclient *searpc.Client diff --git a/notification-server/server.go b/notification-server/server.go index de938b40..a490371f 100644 --- a/notification-server/server.go +++ b/notification-server/server.go @@ -8,6 +8,7 @@ import ( "io" "net/http" "os" + "os/signal" "path/filepath" "strings" "syscall" @@ -26,6 +27,7 @@ var logFile, absLogFile string var privateKey string var host string var port uint32 +var logFp *os.File var ccnetDB *sql.DB @@ -166,11 +168,12 @@ func main() { } if logFile == "" { - absLogFile = filepath.Join(configDir, "notification.log") + absLogFile = filepath.Join(configDir, "notification-server.log") fp, err := os.OpenFile(absLogFile, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644) if err != nil { log.Fatalf("Failed to open or create log file: %v", err) } + logFp = fp log.SetOutput(fp) } else if logFile != "-" { absLogFile, err = filepath.Abs(logFile) @@ -181,16 +184,18 @@ func main() { if err != nil { log.Fatalf("Failed to open or create log file: %v", err) } + logFp = fp log.SetOutput(fp) } if absLogFile != "" { - errorLogFile := filepath.Join(filepath.Dir(absLogFile), "notification_server_error.log") + errorLogFile := filepath.Join(filepath.Dir(absLogFile), "notification-server-error.log") fp, err := os.OpenFile(errorLogFile, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644) if err != nil { log.Fatalf("Failed to open or create error log file: %v", err) } syscall.Dup3(int(fp.Fd()), int(os.Stderr.Fd()), 0) + fp.Close() } loadNotifConfig() @@ -198,6 +203,8 @@ func main() { Init() + go handleUser1Signal() + router := newHTTPRouter() log.Info("notification server started.") @@ -209,6 +216,39 @@ func main() { } } +func handleUser1Signal() { + signalChan := make(chan os.Signal, 1) + signal.Notify(signalChan, syscall.SIGUSR1) + <-signalChan + + for { + select { + case <-signalChan: + logRotate() + } + } +} + +func logRotate() { + fp, err := os.OpenFile(absLogFile, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644) + if err != nil { + log.Fatalf("Failed to reopen notification log: %v", err) + } + log.SetOutput(fp) + if logFp != nil { + logFp.Close() + logFp = fp + } + + errorLogFile := filepath.Join(filepath.Dir(absLogFile), "notification-server-error.log") + errFp, err := os.OpenFile(errorLogFile, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644) + if err != nil { + log.Fatalf("Failed to reopen notification error log: %v", err) + } + syscall.Dup3(int(errFp.Fd()), int(os.Stderr.Fd()), 0) + errFp.Close() +} + func newHTTPRouter() *mux.Router { r := mux.NewRouter() r.Handle("/", appHandler(messageCB))