diff --git a/fileserver/fileserver.go b/fileserver/fileserver.go index 39acddc..2af6832 100644 --- a/fileserver/fileserver.go +++ b/fileserver/fileserver.go @@ -27,10 +27,10 @@ import ( "github.com/haiwen/seafile-server/fileserver/repomgr" "github.com/haiwen/seafile-server/fileserver/searpc" "github.com/haiwen/seafile-server/fileserver/share" + "github.com/haiwen/seafile-server/fileserver/utils" _ "github.com/mattn/go-sqlite3" log "github.com/sirupsen/logrus" "gopkg.in/ini.v1" - stdlog "log" "net/http/pprof" ) @@ -365,6 +365,10 @@ func main() { logFp = fp log.SetOutput(fp) } + + if absLogFile != "" && !logToStdout { + utils.Dup(int(logFp.Fd()), int(os.Stderr.Fd())) + } // When logFile is "-", use default output (StdOut) level, err := log.ParseLevel(option.LogLevel) @@ -412,9 +416,6 @@ func main() { server.Addr = fmt.Sprintf("%s:%d", option.Host, option.Port) server.Handler = router - errorLog := stdlog.New(log.StandardLogger().Writer(), "", 0) - server.ErrorLog = errorLog - err = server.ListenAndServe() if err != nil { log.Printf("File server exiting: %v", err) @@ -453,6 +454,8 @@ func logRotate() { logFp.Close() logFp = fp } + + utils.Dup(int(logFp.Fd()), int(os.Stderr.Fd())) } var rpcclient *searpc.Client diff --git a/fileserver/utils/dup2.go b/fileserver/utils/dup2.go new file mode 100644 index 0000000..f91cf5a --- /dev/null +++ b/fileserver/utils/dup2.go @@ -0,0 +1,11 @@ +//go:build !(linux && arm64) + +package utils + +import ( + "syscall" +) + +func Dup(from, to int) error { + return syscall.Dup2(from, to) +} diff --git a/fileserver/utils/dup3.go b/fileserver/utils/dup3.go new file mode 100644 index 0000000..2b7ed2a --- /dev/null +++ b/fileserver/utils/dup3.go @@ -0,0 +1,11 @@ +//go:build linux && arm64 + +package utils + +import ( + "syscall" +) + +func Dup(from, to int) error { + return syscall.Dup3(from, to, 0) +} diff --git a/notification-server/dup2.go b/notification-server/dup2.go new file mode 100644 index 0000000..e831afc --- /dev/null +++ b/notification-server/dup2.go @@ -0,0 +1,11 @@ +//go:build !(linux && arm64) + +package main + +import ( + "syscall" +) + +func Dup(from, to int) error { + return syscall.Dup2(from, to) +} diff --git a/notification-server/dup3.go b/notification-server/dup3.go new file mode 100644 index 0000000..561e685 --- /dev/null +++ b/notification-server/dup3.go @@ -0,0 +1,11 @@ +//go:build linux && arm64 + +package main + +import ( + "syscall" +) + +func Dup(from, to int) error { + return syscall.Dup3(from, to, 0) +} diff --git a/notification-server/server.go b/notification-server/server.go index 4ab94bd..ad2b682 100644 --- a/notification-server/server.go +++ b/notification-server/server.go @@ -20,7 +20,6 @@ import ( "github.com/gorilla/websocket" log "github.com/sirupsen/logrus" "gopkg.in/ini.v1" - stdlog "log" ) var configDir string @@ -197,6 +196,10 @@ func main() { log.SetOutput(fp) } + if absLogFile != "" && !logToStdout { + Dup(int(logFp.Fd()), int(os.Stderr.Fd())) + } + if err := loadJwtPrivateKey(); err != nil { log.Fatalf("Failed to read config: %v", err) } @@ -216,8 +219,6 @@ func main() { server.Addr = fmt.Sprintf("%s:%d", host, port) server.Handler = router - errorLog := stdlog.New(log.StandardLogger().Writer(), "", 0) - server.ErrorLog = errorLog err = server.ListenAndServe() if err != nil { log.Infof("notificationserver exiting: %v", err) @@ -256,6 +257,8 @@ func logRotate() { logFp.Close() logFp = fp } + + Dup(int(logFp.Fd()), int(os.Stderr.Fd())) } func newHTTPRouter() *mux.Router {