Browse Source

capture http servers error logs

otherwise they will be printed to stdout
Nicola Murino 4 years ago
parent
commit
6d84c5b9e3
4 changed files with 24 additions and 0 deletions
  1. 2 0
      httpd/httpd.go
  2. 18 0
      logger/logger.go
  3. 2 0
      telemetry/telemetry.go
  4. 2 0
      webdavd/server.go

+ 2 - 0
httpd/httpd.go

@@ -9,6 +9,7 @@ package httpd
 import (
 	"crypto/tls"
 	"fmt"
+	"log"
 	"net/http"
 	"path/filepath"
 	"runtime"
@@ -154,6 +155,7 @@ func (c Conf) Initialize(configDir string) error {
 		WriteTimeout:   60 * time.Second,
 		IdleTimeout:    120 * time.Second,
 		MaxHeaderBytes: 1 << 16, // 64KB
+		ErrorLog:       log.New(&logger.StdLoggerWrapper{Sender: logSender}, "", 0),
 	}
 	if certificateFile != "" && certificateKeyFile != "" {
 		certMgr, err = common.NewCertManager(certificateFile, certificateKeyFile, logSender)

+ 18 - 0
logger/logger.go

@@ -40,6 +40,24 @@ var (
 	rollingLogger *lumberjack.Logger
 )
 
+// StdLoggerWrapper is a wrapper for standard logger compatibility
+type StdLoggerWrapper struct {
+	Sender string
+}
+
+// Write implements the io.Writer interface. This is useful to set as a writer
+// for the standard library log.
+func (l *StdLoggerWrapper) Write(p []byte) (n int, err error) {
+	n = len(p)
+	if n > 0 && p[n-1] == '\n' {
+		// Trim CR added by stdlog.
+		p = p[0 : n-1]
+	}
+
+	Log(LevelError, l.Sender, "", string(p))
+	return
+}
+
 // GetLogger get the configured logger instance
 func GetLogger() *zerolog.Logger {
 	return &logger

+ 2 - 0
telemetry/telemetry.go

@@ -6,6 +6,7 @@ package telemetry
 
 import (
 	"crypto/tls"
+	"log"
 	"net/http"
 	"path/filepath"
 	"runtime"
@@ -82,6 +83,7 @@ func (c Conf) Initialize(configDir string) error {
 		WriteTimeout:   60 * time.Second,
 		IdleTimeout:    120 * time.Second,
 		MaxHeaderBytes: 1 << 14, // 16KB
+		ErrorLog:       log.New(&logger.StdLoggerWrapper{Sender: logSender}, "", 0),
 	}
 	if certificateFile != "" && certificateKeyFile != "" {
 		certMgr, err = common.NewCertManager(certificateFile, certificateKeyFile, logSender)

+ 2 - 0
webdavd/server.go

@@ -5,6 +5,7 @@ import (
 	"crypto/tls"
 	"errors"
 	"fmt"
+	"log"
 	"net/http"
 	"path"
 	"path/filepath"
@@ -42,6 +43,7 @@ func (s *webDavServer) listenAndServe() error {
 		ReadHeaderTimeout: 30 * time.Second,
 		IdleTimeout:       120 * time.Second,
 		MaxHeaderBytes:    1 << 16, // 64KB
+		ErrorLog:          log.New(&logger.StdLoggerWrapper{Sender: logSender}, "", 0),
 	}
 	if s.config.Cors.Enabled {
 		c := cors.New(cors.Options{