1
0
mirror of https://github.com/haiwen/seafile-server.git synced 2025-04-27 19:15:07 +00:00

Format notification server log and redirect stderr to log (#707)

* Format notification server log and redirect stderr to log

* Set http server error log

* Delete unused file

* Modify pkg name

---------

Co-authored-by: 杨赫然 <heran.yang@seafile.com>
This commit is contained in:
feiniks 2024-10-26 16:16:35 +08:00 committed by GitHub
parent 5899f110b9
commit abe4537648
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 50 additions and 44 deletions

View File

@ -30,6 +30,7 @@ import (
_ "github.com/mattn/go-sqlite3"
log "github.com/sirupsen/logrus"
"gopkg.in/ini.v1"
stdlog "log"
"net/http/pprof"
)
@ -374,17 +375,6 @@ func main() {
log.SetLevel(level)
}
if absLogFile != "" {
errorLogFile := filepath.Join(filepath.Dir(absLogFile), "fileserver-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)
// We need to close the old fp, because it has beed duped.
fp.Close()
}
if err := option.LoadSeahubConfig(); err != nil {
log.Fatalf("Failed to read seahub config: %v", err)
}
@ -418,8 +408,14 @@ func main() {
log.Print("Seafile file server started.")
addr := fmt.Sprintf("%s:%d", option.Host, option.Port)
err = http.ListenAndServe(addr, router)
server := new(http.Server)
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)
}
@ -457,14 +453,6 @@ 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

View File

@ -1,18 +1,36 @@
package main
import (
"fmt"
"strings"
log "github.com/sirupsen/logrus"
)
const (
timestampFormat = "2006/01/02 15:04:05 "
timestampFormat = "[2006-01-02 15:04:05] "
)
type LogFormatter struct{}
func (f *LogFormatter) Format(entry *log.Entry) ([]byte, error) {
buf := make([]byte, 0, len(timestampFormat)+len(entry.Message)+1)
levelStr := entry.Level.String()
if levelStr == "fatal" {
levelStr = "ERROR"
} else {
levelStr = strings.ToUpper(levelStr)
}
level := fmt.Sprintf("[%s] ", levelStr)
appName := ""
if logToStdout {
appName = "[notification-server] "
}
buf := make([]byte, 0, len(appName)+len(timestampFormat)+len(level)+len(entry.Message)+1)
if logToStdout {
buf = append(buf, appName...)
}
buf = entry.Time.AppendFormat(buf, timestampFormat)
buf = append(buf, level...)
buf = append(buf, entry.Message...)
buf = append(buf, '\n')
return buf, nil

View File

@ -20,6 +20,7 @@ import (
"github.com/gorilla/websocket"
log "github.com/sirupsen/logrus"
"gopkg.in/ini.v1"
stdlog "log"
)
var configDir string
@ -31,10 +32,17 @@ var logFp *os.File
var ccnetDB *sql.DB
var logToStdout bool
func init() {
flag.StringVar(&configDir, "c", "", "config directory")
flag.StringVar(&logFile, "l", "", "log file path")
env := os.Getenv("SEAFILE_LOG_TO_STDOUT")
if env == "true" {
logToStdout = true
}
log.SetFormatter(&LogFormatter{})
}
@ -166,7 +174,9 @@ func main() {
log.Fatalf("config directory %s doesn't exist: %v.", configDir, err)
}
if logFile == "" {
if logToStdout {
// Use default output (StdOut)
} else if logFile == "" {
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 {
@ -187,16 +197,6 @@ func main() {
log.SetOutput(fp)
}
if absLogFile != "" {
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()
}
if err := loadJwtPrivateKey(); err != nil {
log.Fatalf("Failed to read config: %v", err)
}
@ -212,8 +212,13 @@ func main() {
log.Info("notification server started.")
addr := fmt.Sprintf("%s:%d", host, port)
err = http.ListenAndServe(addr, router)
server := new(http.Server)
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)
}
@ -239,6 +244,9 @@ func handleUser1Signal() {
}
func logRotate() {
if logToStdout {
return
}
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)
@ -248,14 +256,6 @@ func logRotate() {
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 {