diff --git a/go.mod b/go.mod index 579b4d8..25114e8 100644 --- a/go.mod +++ b/go.mod @@ -21,6 +21,7 @@ require ( require ( github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect github.com/modern-go/reflect2 v1.0.2 // indirect + gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect ) require ( diff --git a/go.sum b/go.sum index 50f5723..c875902 100644 --- a/go.sum +++ b/go.sum @@ -48,6 +48,8 @@ golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/logutil/factory.go b/pkg/logutil/factory.go index 8c2e8a7..07975ac 100644 --- a/pkg/logutil/factory.go +++ b/pkg/logutil/factory.go @@ -11,6 +11,7 @@ import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" + "gopkg.in/natefinch/lumberjack.v2" ) type Logger struct { @@ -37,9 +38,6 @@ func NewLogger(logPath string) *Logger { zapLevel = zapcore.DebugLevel } - zapCfg := zap.NewDevelopmentConfig() - zapCfg.Level.SetLevel(zapLevel) - consoleCfg := zapcore.EncoderConfig{ TimeKey: "time", LevelKey: "level", @@ -53,6 +51,13 @@ func NewLogger(logPath string) *Logger { EncodeDuration: zapcore.StringDurationEncoder, } consoleEncoder := zapcore.NewConsoleEncoder(consoleCfg) + consoleEncoderCore := zapcore.NewCore(consoleEncoder, zapcore.AddSync(os.Stdout), zapLevel) + + // Set up file logging with overwrite mode + logFile := zapcore.AddSync(&lumberjack.Logger{ + Filename: logPath, + }) + fmt.Println("Logging to", logPath) fileCfg := zapcore.EncoderConfig{ TimeKey: "time", @@ -67,20 +72,10 @@ func NewLogger(logPath string) *Logger { EncodeDuration: zapcore.StringDurationEncoder, } fileEncoder := zapcore.NewConsoleEncoder(fileCfg) + fileEncoderCore := zapcore.NewCore(fileEncoder, zapcore.AddSync(logFile), zapLevel) - // Set up file logging with overwrite mode - logFile, err := os.OpenFile(logPath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644) - if err != nil { - panic("cannot open log file: " + err.Error()) - } - fmt.Println("Logging to", logPath) - - core := zapcore.NewTee( - zapcore.NewCore(consoleEncoder, zapcore.AddSync(os.Stdout), zapCfg.Level), - zapcore.NewCore(fileEncoder, zapcore.AddSync(logFile), zapCfg.Level), - ) - - logger := zap.New(core, zap.AddCaller(), zap.Development()) + cores := zapcore.NewTee(consoleEncoderCore, fileEncoderCore) + logger := zap.New(cores, zap.AddCaller(), zap.Development()) defer logger.Sync() // flushes buffer, if any sugar := logger.Sugar()