diff --git a/.gitignore b/.gitignore index c3c7379..1b9ef3e 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,5 @@ indexes sitemap !util/sitemap license.cert -*.cert \ No newline at end of file +*.cert +/logs \ No newline at end of file diff --git a/cmd/root.go b/cmd/root.go index aa39095..882e10c 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -27,6 +27,7 @@ import ( homedir "github.com/mitchellh/go-homedir" "github.com/spf13/viper" + "gopkg.in/natefinch/lumberjack.v2" ) var ( @@ -103,21 +104,17 @@ func initConfig() { fmt.Println("viper.Unmarshal", err) } - initLogger(cfg.Level, cfg.LogEncoding) + initLogger(cfg.Level, cfg.LogEncoding, cfg.Logger) cfg.Database.Prefix = "mnt_" logger.Info("config", zap.Any("config", cfg)) } -func initLogger(level, LogEncoding string, paths ...string) { +func initLogger(level, LogEncoding string, logCfg ...conf.LoggerConfig) { var err error cfg := zap.NewProductionConfig() - cfg.Encoding = "console" - if LogEncoding != "console" { - cfg.Encoding = "json" - } cfg.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder lv := zap.InfoLevel @@ -134,17 +131,44 @@ func initLogger(level, LogEncoding string, paths ...string) { lv = zap.InfoLevel } - cfg.Level.SetLevel(lv) + if len(logCfg) == 0 || logCfg[0].Filename == "" { + cfg.Encoding = "console" + if LogEncoding != "console" { + cfg.Encoding = "json" + } + cfg.Level.SetLevel(lv) - if len(paths) == 0 { - paths = append(paths, "stdout") + paths := []string{"stdout"} + cfg.ErrorOutputPaths = paths + cfg.OutputPaths = paths + logger, err = cfg.Build() + if err != nil { + logger.Fatal("zap build", zap.Error(err)) + } + return } - cfg.ErrorOutputPaths = paths - cfg.OutputPaths = paths + w := zapcore.AddSync(&lumberjack.Logger{ + Filename: logCfg[0].Filename, + MaxSize: logCfg[0].MaxSizeMB, // megabytes + MaxBackups: logCfg[0].MaxBackups, + MaxAge: logCfg[0].MaxAgeDays, // days + Compress: logCfg[0].Comptress, + }) - logger, err = cfg.Build() - if err != nil { - logger.Fatal("zap build", zap.Error(err)) + enc := zapcore.NewConsoleEncoder(cfg.EncoderConfig) + if LogEncoding != "console" { + enc = zapcore.NewJSONEncoder(cfg.EncoderConfig) } + core := zapcore.NewCore( + enc, + w, + lv, + ) + + logger = zap.New( + core, + zap.AddCaller(), + // zap.AddCallerSkip(1), + ) } diff --git a/conf/config.go b/conf/config.go index c069b18..ae6d434 100644 --- a/conf/config.go +++ b/conf/config.go @@ -1,10 +1,19 @@ package conf +type LoggerConfig struct { + Filename string + MaxSizeMB int // 每份日志大小 + MaxBackups int // 日志保留多少份 + MaxAgeDays int // 保留多少天的日志 + Comptress bool +} + // Config app config type Config struct { Level string // LogEncoding string // log encoding, json or console - Port int // listent port + Logger LoggerConfig + Port int // listent port Database Database JWT JWT } diff --git a/go.mod b/go.mod index dff47a2..69ff682 100644 --- a/go.mod +++ b/go.mod @@ -21,6 +21,7 @@ require ( google.golang.org/grpc v1.44.0 google.golang.org/protobuf v1.28.0 gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df + gopkg.in/natefinch/lumberjack.v2 v2.2.1 gorm.io/driver/mysql v1.3.2 gorm.io/gorm v1.23.2 ) diff --git a/go.sum b/go.sum index ab754ca..7e5426b 100644 --- a/go.sum +++ b/go.sum @@ -889,6 +889,8 @@ gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AW gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= gopkg.in/ini.v1 v1.66.2 h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI= gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +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.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=