Allow to rotate logs on demand

Log file can be rotated sending a SIGUSR1 signal on Unix based systems and
using "sftpgo service rotatelogs" on Windows

Fixes #133
This commit is contained in:
Nicola Murino
2020-06-22 19:11:53 +02:00
parent 44fb276464
commit 0056984d4b
14 changed files with 127 additions and 18 deletions

View File

@@ -9,6 +9,7 @@
package logger
import (
"errors"
"fmt"
"os"
"path/filepath"
@@ -37,6 +38,7 @@ const (
var (
logger zerolog.Logger
consoleLogger zerolog.Logger
rollingLogger *lumberjack.Logger
)
// GetLogger get the configured logger instance
@@ -48,13 +50,14 @@ func GetLogger() *zerolog.Logger {
func InitLogger(logFilePath string, logMaxSize int, logMaxBackups int, logMaxAge int, logCompress bool, level zerolog.Level) {
zerolog.TimeFieldFormat = dateFormat
if isLogFilePathValid(logFilePath) {
logger = zerolog.New(&lumberjack.Logger{
rollingLogger = &lumberjack.Logger{
Filename: logFilePath,
MaxSize: logMaxSize,
MaxBackups: logMaxBackups,
MaxAge: logMaxAge,
Compress: logCompress,
})
}
logger = zerolog.New(rollingLogger)
EnableConsoleLogger(level)
} else {
logger = zerolog.New(logSyncWrapper{
@@ -69,6 +72,7 @@ func InitLogger(logFilePath string, logMaxSize int, logMaxBackups int, logMaxAge
// ConsoleLogger will not be affected
func DisableLogger() {
logger = zerolog.Nop()
rollingLogger = nil
}
// EnableConsoleLogger enables the console logger
@@ -81,6 +85,14 @@ func EnableConsoleLogger(level zerolog.Level) {
consoleLogger = zerolog.New(consoleOutput).With().Timestamp().Logger().Level(level)
}
// RotateLogFile closes the existing log file and immediately create a new one
func RotateLogFile() error {
if rollingLogger != nil {
return rollingLogger.Rotate()
}
return errors.New("logging to file is disabled")
}
// Log logs at the specified level for the specified sender
func Log(level LogLevel, sender string, connectionID string, format string, v ...interface{}) {
switch level {