1
0
mirror of https://github.com/haiwen/seafile-server.git synced 2025-09-17 07:40:25 +00:00

Redirect STDERR to error log (#709)

* Redirect STDERR to error log

* Add dup2.go

* Redirect error log to log file

---------

Co-authored-by: 杨赫然 <heran.yang@seafile.com>
This commit is contained in:
feiniks
2024-10-29 10:57:03 +08:00
committed by GitHub
parent abe4537648
commit fdd3bc8f52
6 changed files with 57 additions and 7 deletions

View File

@@ -27,10 +27,10 @@ import (
"github.com/haiwen/seafile-server/fileserver/repomgr" "github.com/haiwen/seafile-server/fileserver/repomgr"
"github.com/haiwen/seafile-server/fileserver/searpc" "github.com/haiwen/seafile-server/fileserver/searpc"
"github.com/haiwen/seafile-server/fileserver/share" "github.com/haiwen/seafile-server/fileserver/share"
"github.com/haiwen/seafile-server/fileserver/utils"
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"gopkg.in/ini.v1" "gopkg.in/ini.v1"
stdlog "log"
"net/http/pprof" "net/http/pprof"
) )
@@ -365,6 +365,10 @@ func main() {
logFp = fp logFp = fp
log.SetOutput(fp) log.SetOutput(fp)
} }
if absLogFile != "" && !logToStdout {
utils.Dup(int(logFp.Fd()), int(os.Stderr.Fd()))
}
// When logFile is "-", use default output (StdOut) // When logFile is "-", use default output (StdOut)
level, err := log.ParseLevel(option.LogLevel) level, err := log.ParseLevel(option.LogLevel)
@@ -412,9 +416,6 @@ func main() {
server.Addr = fmt.Sprintf("%s:%d", option.Host, option.Port) server.Addr = fmt.Sprintf("%s:%d", option.Host, option.Port)
server.Handler = router server.Handler = router
errorLog := stdlog.New(log.StandardLogger().Writer(), "", 0)
server.ErrorLog = errorLog
err = server.ListenAndServe() err = server.ListenAndServe()
if err != nil { if err != nil {
log.Printf("File server exiting: %v", err) log.Printf("File server exiting: %v", err)
@@ -453,6 +454,8 @@ func logRotate() {
logFp.Close() logFp.Close()
logFp = fp logFp = fp
} }
utils.Dup(int(logFp.Fd()), int(os.Stderr.Fd()))
} }
var rpcclient *searpc.Client var rpcclient *searpc.Client

11
fileserver/utils/dup2.go Normal file
View File

@@ -0,0 +1,11 @@
//go:build !(linux && arm64)
package utils
import (
"syscall"
)
func Dup(from, to int) error {
return syscall.Dup2(from, to)
}

11
fileserver/utils/dup3.go Normal file
View File

@@ -0,0 +1,11 @@
//go:build linux && arm64
package utils
import (
"syscall"
)
func Dup(from, to int) error {
return syscall.Dup3(from, to, 0)
}

View File

@@ -0,0 +1,11 @@
//go:build !(linux && arm64)
package main
import (
"syscall"
)
func Dup(from, to int) error {
return syscall.Dup2(from, to)
}

View File

@@ -0,0 +1,11 @@
//go:build linux && arm64
package main
import (
"syscall"
)
func Dup(from, to int) error {
return syscall.Dup3(from, to, 0)
}

View File

@@ -20,7 +20,6 @@ import (
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"gopkg.in/ini.v1" "gopkg.in/ini.v1"
stdlog "log"
) )
var configDir string var configDir string
@@ -197,6 +196,10 @@ func main() {
log.SetOutput(fp) log.SetOutput(fp)
} }
if absLogFile != "" && !logToStdout {
Dup(int(logFp.Fd()), int(os.Stderr.Fd()))
}
if err := loadJwtPrivateKey(); err != nil { if err := loadJwtPrivateKey(); err != nil {
log.Fatalf("Failed to read config: %v", err) log.Fatalf("Failed to read config: %v", err)
} }
@@ -216,8 +219,6 @@ func main() {
server.Addr = fmt.Sprintf("%s:%d", host, port) server.Addr = fmt.Sprintf("%s:%d", host, port)
server.Handler = router server.Handler = router
errorLog := stdlog.New(log.StandardLogger().Writer(), "", 0)
server.ErrorLog = errorLog
err = server.ListenAndServe() err = server.ListenAndServe()
if err != nil { if err != nil {
log.Infof("notificationserver exiting: %v", err) log.Infof("notificationserver exiting: %v", err)
@@ -256,6 +257,8 @@ func logRotate() {
logFp.Close() logFp.Close()
logFp = fp logFp = fp
} }
Dup(int(logFp.Fd()), int(os.Stderr.Fd()))
} }
func newHTTPRouter() *mux.Router { func newHTTPRouter() *mux.Router {