improve logger

log file size, rotation policy and compression are now configurable
This commit is contained in:
Nicola Murino 2019-07-31 14:06:55 +02:00
parent fab21dcf51
commit 2a8ab620f3
3 changed files with 26 additions and 12 deletions

View file

@ -51,6 +51,11 @@ The `sftpgo` executable supports the following command line flags:
- `-config-dir` string. Location of the config dir. This directory should contain the `sftpgo.conf` configuration file, the private key for the SFTP server (`id_rsa` file) and the SQLite database if you use SQLite as data provider. The server private key will be autogenerated if the user that executes SFTPGo has write access to the config-dir. The default value is "." - `-config-dir` string. Location of the config dir. This directory should contain the `sftpgo.conf` configuration file, the private key for the SFTP server (`id_rsa` file) and the SQLite database if you use SQLite as data provider. The server private key will be autogenerated if the user that executes SFTPGo has write access to the config-dir. The default value is "."
- `-log-file-path` string. Location for the log file, default "sftpgo.log" - `-log-file-path` string. Location for the log file, default "sftpgo.log"
- `-log-max-size` int. Maximum size in megabytes of the log file before it gets rotated. Default 10
- `-log-max-backups` int. Maximum number of old log files to retain. Default 5
- `-log-max-age` int. Maximum number of days to retain old log files. Default 28
- `-log-compress` boolean. Determine if the rotated log files should be compressed using gzip
- `-log-verbose` boolean. Enable verbose logs. Default `true`
Before starting `sftpgo` a dataprovider must be configured. Before starting `sftpgo` a dataprovider must be configured.

View file

@ -30,20 +30,15 @@ func GetLogger() *zerolog.Logger {
return &logger return &logger
} }
// InitLogger configures the logger. // InitLogger configures the logger using the given parameters
// It sets the log file path and the log level func InitLogger(logFilePath string, logMaxSize int, logMaxBackups int, logMaxAge int, logCompress bool, level zerolog.Level) {
func InitLogger(logFilePath string, level zerolog.Level) {
logMaxSize := 10 // MB
logMaxBackups := 5
logMaxAge := 28 // days
zerolog.TimeFieldFormat = dateFormat zerolog.TimeFieldFormat = dateFormat
logger = zerolog.New(&lumberjack.Logger{ logger = zerolog.New(&lumberjack.Logger{
Filename: logFilePath, Filename: logFilePath,
MaxSize: logMaxSize, MaxSize: logMaxSize,
MaxBackups: logMaxBackups, MaxBackups: logMaxBackups,
MaxAge: logMaxAge, MaxAge: logMaxAge,
Compress: false, Compress: logCompress,
}).With().Timestamp().Logger().Level(level) }).With().Timestamp().Logger().Level(level)
consoleOutput := zerolog.ConsoleWriter{ consoleOutput := zerolog.ConsoleWriter{
@ -51,7 +46,7 @@ func InitLogger(logFilePath string, level zerolog.Level) {
TimeFormat: dateFormat, TimeFormat: dateFormat,
NoColor: true, NoColor: true,
} }
consoleLogger = zerolog.New(consoleOutput).With().Timestamp().Logger() consoleLogger = zerolog.New(consoleOutput).With().Timestamp().Logger().Level(level)
} }
// Debug logs at debug level for the specified sender // Debug logs at debug level for the specified sender

20
main.go
View file

@ -28,17 +28,31 @@ func main() {
confName := "sftpgo.conf" confName := "sftpgo.conf"
logSender := "main" logSender := "main"
var ( var (
configDir string configDir string
logFilePath string logFilePath string
logMaxSize int
logMaxBackups int
logMaxAge int
logCompress bool
logVerbose bool
) )
flag.StringVar(&configDir, "config-dir", ".", "Location for SFTPGo config dir. It must contain sftpgo.conf, "+ flag.StringVar(&configDir, "config-dir", ".", "Location for SFTPGo config dir. It must contain sftpgo.conf, "+
"the private key for the SFTP server (id_rsa file) and the SQLite database if you use SQLite as data provider. "+ "the private key for the SFTP server (id_rsa file) and the SQLite database if you use SQLite as data provider. "+
"The server private key will be autogenerated if the user that executes SFTPGo has write access to the config-dir") "The server private key will be autogenerated if the user that executes SFTPGo has write access to the config-dir")
flag.StringVar(&logFilePath, "log-file-path", "sftpgo.log", "Location for the log file") flag.StringVar(&logFilePath, "log-file-path", "sftpgo.log", "Location for the log file")
flag.IntVar(&logMaxSize, "log-max-size", 10, "Maximum size in megabytes of the log file before it gets rotated.")
flag.IntVar(&logMaxBackups, "log-max-backups", 5, "Maximum number of old log files to retain")
flag.IntVar(&logMaxAge, "log-max-age", 28, "Maximum number of days to retain old log files")
flag.BoolVar(&logCompress, "log-compress", false, "Determine if the rotated log files should be compressed using gzip")
flag.BoolVar(&logVerbose, "log-verbose", true, "Enable verbose logs")
flag.Parse() flag.Parse()
configFilePath := filepath.Join(configDir, confName) configFilePath := filepath.Join(configDir, confName)
logger.InitLogger(logFilePath, zerolog.DebugLevel) logLevel := zerolog.DebugLevel
if !logVerbose {
logLevel = zerolog.InfoLevel
}
logger.InitLogger(logFilePath, logMaxSize, logMaxBackups, logMaxAge, logCompress, logLevel)
logger.Info(logSender, "starting SFTPGo, config dir: %v", configDir) logger.Info(logSender, "starting SFTPGo, config dir: %v", configDir)
config.LoadConfig(configFilePath) config.LoadConfig(configFilePath)
providerConf := config.GetProviderConf() providerConf := config.GetProviderConf()