TUN-3472: Set up rolling logger with zerolog and lumberjack

This commit is contained in:
Areg Harutyunyan
2020-12-02 14:58:17 -06:00
committed by Adam Chalmers
parent 870f5fa907
commit 9bc1c0c70b
39 changed files with 832 additions and 2488 deletions

View File

@@ -3,10 +3,12 @@ package logger
import (
"io"
"os"
"path"
"github.com/rs/zerolog"
fallbacklog "github.com/rs/zerolog/log"
"github.com/urfave/cli/v2"
"gopkg.in/natefinch/lumberjack.v2"
)
const (
@@ -22,25 +24,34 @@ const (
LogSSHLevelFlag = "log-level"
)
func fallbackLogger(err error) *zerolog.Logger {
failLog := fallbacklog.With().Logger()
fallbacklog.Error().Msgf("Falling back to a default logger due to logger setup failure: %s", err)
return &failLog
}
func newZerolog(loggerConfig *Config) *zerolog.Logger {
var writers []io.Writer
if loggerConfig.ConsoleConfig != nil {
writers = append(writers, zerolog.ConsoleWriter{
Out: os.Stderr,
NoColor: loggerConfig.ConsoleConfig.noColor,
})
writers = append(writers, createConsoleLogger(*loggerConfig.ConsoleConfig))
}
// TODO TUN-3472: Support file writer and log rotation
if loggerConfig.RollingConfig != nil {
rollingLogger, err := createRollingLogger(*loggerConfig.RollingConfig)
if err != nil {
return fallbackLogger(err)
}
writers = append(writers, rollingLogger)
}
multi := zerolog.MultiLevelWriter(writers...)
level, err := zerolog.ParseLevel(loggerConfig.MinLevel)
if err != nil {
failLog := fallbacklog.With().Logger()
fallbacklog.Error().Msgf("Falling back to a default logger due to logger setup failure: %s", err)
return &failLog
return fallbackLogger(err)
}
log := zerolog.New(multi).With().Timestamp().Logger().Level(level)
@@ -87,3 +98,23 @@ func Create(loggerConfig *Config) *zerolog.Logger {
return newZerolog(loggerConfig)
}
func createConsoleLogger(config ConsoleConfig) io.Writer {
return zerolog.ConsoleWriter{
Out: os.Stderr,
NoColor: config.noColor,
}
}
func createRollingLogger(config RollingConfig) (io.Writer, error) {
if err := os.MkdirAll(config.Directory, 0744); err != nil {
return nil, err
}
return &lumberjack.Logger{
Filename: path.Join(config.Directory, config.Filename),
MaxBackups: config.maxBackups,
MaxSize: config.maxSize,
MaxAge: config.maxAge,
}, nil
}