diff --git a/go.mod b/go.mod index 44f56f2..736b8bc 100644 --- a/go.mod +++ b/go.mod @@ -11,11 +11,14 @@ require ( github.com/jinzhu/copier v0.3.5 github.com/liamylian/jsontime/v2 v2.0.0 github.com/mozillazg/go-pinyin v0.19.0 + github.com/rs/zerolog v1.28.0 github.com/rueian/rueidis v0.0.73 github.com/samber/lo v1.27.0 github.com/shopspring/decimal v1.3.1 github.com/spf13/viper v1.12.0 github.com/xuri/excelize/v2 v2.6.1 + go.uber.org/zap v1.23.0 + gopkg.in/natefinch/lumberjack.v2 v2.0.0 xorm.io/builder v0.3.12 xorm.io/xorm v1.3.1 ) @@ -45,7 +48,6 @@ require ( github.com/pelletier/go-toml/v2 v2.0.2 // indirect github.com/richardlehane/mscfb v1.0.4 // indirect github.com/richardlehane/msoleps v1.0.3 // indirect - github.com/rs/zerolog v1.28.0 // indirect github.com/spf13/afero v1.8.2 // indirect github.com/spf13/cast v1.5.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect @@ -55,6 +57,8 @@ require ( github.com/ugorji/go/codec v1.2.7 // indirect github.com/xuri/efp v0.0.0-20220603152613-6918739fd470 // indirect github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22 // indirect + go.uber.org/atomic v1.10.0 // indirect + go.uber.org/multierr v1.8.0 // indirect golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8 // indirect golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 // indirect golang.org/x/net v0.0.0-20220812174116-3211cb980234 // indirect @@ -62,7 +66,6 @@ require ( golang.org/x/text v0.3.7 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/ini.v1 v1.66.4 // indirect - gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 9831dc5..3f14776 100644 --- a/go.sum +++ b/go.sum @@ -39,6 +39,7 @@ dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7 gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s= gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU= gitee.com/travelliu/dm v1.8.11192/go.mod h1:DHTzyhCrM843x9VdKVbZ+GKXGRbKM2sJ4LxihRxShkE= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= @@ -60,6 +61,7 @@ github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6l github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= @@ -369,7 +371,6 @@ github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= @@ -443,6 +444,7 @@ github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= @@ -571,14 +573,21 @@ go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= +go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -762,8 +771,6 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220808155132-1c4a2a72c664 h1:v1W7bwXHsnLLloWYTVEdvGvA7BHMeBYsPcF0GLDxIRs= -golang.org/x/sys v0.0.0-20220808155132-1c4a2a72c664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220907062415-87db552b00fd h1:AZeIEzg+8RCELJYq8w+ODLVxFgLMMigSwO/ffKPEd9U= golang.org/x/sys v0.0.0-20220907062415-87db552b00fd/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/logger/logger.go b/logger/logger.go index e0baead..9b96f41 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -1,75 +1,123 @@ package logger import ( - "io" "os" - jsoniter "github.com/json-iterator/go" - "github.com/rs/zerolog" - "github.com/samber/lo" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" ) -var logger *zerolog.Logger +var ( + logger *zap.Logger + sugaredLogger *zap.SugaredLogger +) func init() { - var writers []io.Writer + consoleWriterSync := zapcore.AddSync(os.Stderr) + rollingWriterSync := zapcore.AddSync(newRollingWriter()) + encoderConfig := zap.NewProductionEncoderConfig() + encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder + encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder + consoleEncoder := zapcore.NewConsoleEncoder(encoderConfig) + jsonEncoder := zapcore.NewJSONEncoder(encoderConfig) + core := zapcore.NewTee( + zapcore.NewCore( + consoleEncoder, + consoleWriterSync, + zapcore.DebugLevel, + ), + zapcore.NewCore( + jsonEncoder, + rollingWriterSync, + zapcore.DebugLevel, + ), + ) - writers = append(writers, zerolog.ConsoleWriter{Out: os.Stderr}) - writers = append(writers, newRollingWriter()) - mw := io.MultiWriter(writers...) - logger = lo.ToPtr(zerolog.New(mw).With().Timestamp().Logger()) - logger.Info().Msg("Logger initialized.") + logger = zap.New(core) + sugaredLogger = logger.Sugar() + logger.Info("Logger initialized.") } -func GetLogger() *zerolog.Logger { +func GetLogger() *zap.Logger { return logger } -func Panic() *zerolog.Event { - return logger.Panic() +func Panic(msg string, fields ...zap.Field) { + logger.Panic(msg, fields...) } -func Fatal() *zerolog.Event { - return logger.Fatal() +func Fatal(msg string, fields ...zap.Field) { + logger.Fatal(msg, fields...) } -func Error() *zerolog.Event { - return logger.Error() +func Error(msg string, fields ...zap.Field) { + logger.Error(msg, fields...) } -func Warn() *zerolog.Event { - return logger.Warn() +func Warn(msg string, fields ...zap.Field) { + logger.Warn(msg, fields...) } -func Info() *zerolog.Event { - return logger.Info() +func Info(msg string, fields ...zap.Field) { + logger.Info(msg, fields...) } -func Debug() *zerolog.Event { - return logger.Debug() +func Debug(msg string, fields ...zap.Field) { + logger.Debug(msg, fields...) } -func Trace() *zerolog.Event { - return logger.Trace() +func Panicr(v ...interface{}) { + sugaredLogger.Panic(v...) } -func Print(v ...interface{}) { - logger.Print(v...) +func Panicf(format string, v ...interface{}) { + sugaredLogger.Panicf(format, v...) } -func Printf(format string, v ...interface{}) { - logger.Printf(format, v...) +func Errorr(v ...interface{}) { + sugaredLogger.Panic(v...) } -func With() zerolog.Context { - return logger.With() +func Errorf(format string, v ...interface{}) { + sugaredLogger.Panicf(format, v...) } -func FormatAny(v interface{}) string { - b, err := jsoniter.MarshalToString(v) - if err != nil { - logger.Error().Str("process", "log").Err(err).Stack().Msg("Value marshal failed.") - return "" - } - return b +func Warnr(v ...interface{}) { + sugaredLogger.Warn(v...) +} + +func Warnf(format string, v ...interface{}) { + sugaredLogger.Warnf(format, v...) +} + +func Infor(v ...interface{}) { + sugaredLogger.Info(v...) +} + +func Infof(format string, v ...interface{}) { + sugaredLogger.Infof(format, v...) +} + +func Debugr(v ...interface{}) { + sugaredLogger.Debug(v...) +} + +func Debugf(format string, v ...interface{}) { + sugaredLogger.Debugf(format, v...) +} + +func Named(name string) *zap.Logger { + return logger.Named(name) +} + +func NamedSugar(name string) *zap.SugaredLogger { + return logger.Named(name).Sugar() +} + +func With(fields ...zap.Field) *zap.Logger { + return logger.With(fields...) +} + +func WithSugar(fields ...zap.Field) *zap.SugaredLogger { + return logger.With(fields...).Sugar() } diff --git a/logger/middleware.go b/logger/middleware.go index f470bd9..c622f8f 100644 --- a/logger/middleware.go +++ b/logger/middleware.go @@ -1,9 +1,11 @@ package logger import ( + "fmt" "time" "github.com/gin-gonic/gin" + "go.uber.org/zap" ) func Logger() gin.HandlerFunc { @@ -27,17 +29,20 @@ func Logger() gin.HandlerFunc { path = path + "?" + raw } - event := logger.Info() - if comment != "" { - event = logger.Error() + fields := []zap.Field{ + zap.Int("statusCode", statusCode), + zap.Duration("latency", latency), + zap.String("clientIP", clientIP), + zap.String("method", method), + zap.String("path", path), + } + if comment != "" { + logger.Named("Gin").Error( + comment, + fields..., + ) + } else { + logger.Named("Gin").Info(fmt.Sprintf("%s -> [%d] %s %s.", clientIP, statusCode, method, path), fields...) } - - event. - Int("statusCode", statusCode). - Dur("latency", latency). - Str("clientIP", clientIP). - Str("method", method). - Str("path", path). - Msg(comment) } } diff --git a/logger/xormlogger.go b/logger/xormlogger.go index 30f5221..0c8e980 100644 --- a/logger/xormlogger.go +++ b/logger/xormlogger.go @@ -1,22 +1,20 @@ package logger import ( - "fmt" - - "github.com/rs/zerolog" - "github.com/samber/lo" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" "xorm.io/xorm/log" ) type XormZeroLogger struct { - logger *zerolog.Logger + logger *zap.Logger off bool show bool } -func NewXormZeroLogger(oLogger *zerolog.Logger) *XormZeroLogger { +func NewXormZeroLogger(oLogger *zap.Logger) *XormZeroLogger { return &XormZeroLogger{ - logger: lo.ToPtr(oLogger.With().Str("process", "Xorm").Logger()), + logger: oLogger.Named("Xorm"), off: false, show: true, } @@ -26,46 +24,57 @@ func (l XormZeroLogger) BeforeSQL(_ log.LogContext) {} func (l XormZeroLogger) AfterSQL(c log.LogContext) { if c.Err == nil { - l.logger.Info().Str("SQL", c.SQL).Str("args", FormatAny(c.Args)).Dur("execution", c.ExecuteTime).Send() + l.logger.Info( + "", + zap.String("SQL", c.SQL), + zap.Any("args", c.Args), + zap.Duration("execution", c.ExecuteTime), + ) return } - l.logger.Error().Err(c.Err).Stack().Str("SQL", c.SQL).Str("args", FormatAny(c.Args)).Dur("execution", c.ExecuteTime).Msg(c.Err.Error()) + l.logger.Error( + c.Err.Error(), + zap.Error(c.Err), + zap.String("SQL", c.SQL), + zap.Any("args", c.Args), + zap.Duration("execution", c.ExecuteTime), + ) } func (l XormZeroLogger) Debug(v ...interface{}) { - l.logger.Debug().Str("args", FormatAny(v)).Msg(fmt.Sprint(v...)) + l.logger.Sugar().Debug(v...) } func (l XormZeroLogger) Debugf(format string, v ...interface{}) { - l.logger.Debug().Str("args", FormatAny(v)).Msg(fmt.Sprintf(format, v...)) + l.logger.Sugar().Debugf(format, v...) } func (l XormZeroLogger) Info(v ...interface{}) { - l.logger.Info().Str("args", FormatAny(v)).Msg(fmt.Sprint(v...)) + l.logger.Sugar().Info(v...) } func (l XormZeroLogger) Infof(format string, v ...interface{}) { - l.logger.Info().Str("args", FormatAny(v)).Msg(fmt.Sprintf(format, v...)) + l.logger.Sugar().Infof(format, v...) } func (l XormZeroLogger) Warn(v ...interface{}) { - l.logger.Warn().Str("args", FormatAny(v)).Msg(fmt.Sprint(v...)) + l.logger.Sugar().Warn(v...) } func (l XormZeroLogger) Warnf(format string, v ...interface{}) { - l.logger.Warn().Str("args", FormatAny(v)).Msg(fmt.Sprintf(format, v...)) + l.logger.Sugar().Warnf(format, v...) } func (l XormZeroLogger) Error(v ...interface{}) { - l.logger.Error().Str("args", FormatAny(v)).Msg(fmt.Sprint(v...)) + l.logger.Sugar().Error(v...) } func (l XormZeroLogger) Errorf(format string, v ...interface{}) { - l.logger.Error().Str("args", FormatAny(v)).Msg(fmt.Sprintf(format, v...)) + l.logger.Sugar().Errorf(format, v...) } func (l XormZeroLogger) SetLevel(lvl log.LogLevel) { - l.logger.Warn().Msg("Change log level is not supported.") + l.logger.Warn("Change log level is not supported.") } func (l *XormZeroLogger) ShowSQL(b ...bool) { @@ -81,15 +90,15 @@ func (l XormZeroLogger) Level() log.LogLevel { return log.LOG_OFF } - for _, lvl := range []zerolog.Level{zerolog.DebugLevel, zerolog.InfoLevel, zerolog.WarnLevel, zerolog.ErrorLevel, zerolog.FatalLevel, zerolog.PanicLevel} { + for _, lvl := range []zapcore.Level{zapcore.DebugLevel, zapcore.InfoLevel, zapcore.WarnLevel, zapcore.ErrorLevel, zapcore.FatalLevel, zapcore.PanicLevel} { switch lvl { - case zerolog.DebugLevel: + case zapcore.DebugLevel: return log.LOG_DEBUG - case zerolog.InfoLevel: + case zapcore.InfoLevel: return log.LOG_INFO - case zerolog.WarnLevel: + case zapcore.WarnLevel: return log.LOG_WARNING - case zerolog.ErrorLevel: + case zapcore.ErrorLevel: return log.LOG_ERR } } diff --git a/main.go b/main.go index b1319da..8a8a1ef 100644 --- a/main.go +++ b/main.go @@ -19,20 +19,22 @@ import ( jsontime "github.com/liamylian/jsontime/v2/v2" "github.com/samber/lo" "github.com/shopspring/decimal" + "go.uber.org/zap" ) func init() { + l := logger.Named("Init") err := config.SetupSetting() if err != nil { - logger.Fatal().Err(err).Stack().Msg("Configuration load failed.") + l.Fatal("Configuration load failed.", zap.Error(err)) } - logger.Info().Msg("Configuration loaded!") + l.Info("Configuration loaded!") err = global.SetupDatabaseConnection() if err != nil { - logger.Fatal().Err(err).Stack().Msg("Main Database connect failed.") + l.Fatal("Main Database connect failed.", zap.Error(err)) } - logger.Info().Msg("Main Database connected!") + l.Info("Main Database connected!") err = global.DBConn.Sync( &model.Region{}, @@ -47,27 +49,27 @@ func init() { &model.WillDilutedFee{}, &model.EndUserDetail{}) if err != nil { - logger.Fatal().Err(err).Stack().Msg("Database structure synchronize failed.") + l.Fatal("Database structure synchronize failed.", zap.Error(err)) } - logger.Info().Msg("Database structure synchronized.") + l.Info("Database structure synchronized.") err = global.SetupRedisConnection() if err != nil { - logger.Fatal().Err(err).Stack().Msg("Main Cache Database connect failed.") + l.Fatal("Main Cache Database connect failed.", zap.Error(err)) } - logger.Info().Msg("Main Cache Database connected!") + l.Info("Main Cache Database connected!") err = initializeRegions() if err != nil { - logger.Fatal().Err(err).Stack().Msg("Regions initialize failed.") + l.Fatal("Regions initialize failed.", zap.Error(err)) } - logger.Info().Msg("Regions synchronized.") + l.Info("Regions synchronized.") err = intializeSingularity() if err != nil { - logger.Fatal().Err(err).Stack().Msg("Singularity account intialize failed.") + l.Fatal("Singularity account intialize failed.", zap.Error(err)) } - logger.Info().Msg("Singularity account intialized.") + l.Info("Singularity account intialized.") timeZoneShanghai, _ := time.LoadLocation("Asia/Shanghai") jsontime.AddTimeFormatAlias("simple_datetime", "2006-01-02 15:04:05") @@ -76,7 +78,7 @@ func init() { } func initializeRegions() error { - logger.Info().Msg("Synchronize regions...") + logger.Info("Synchronize regions...") regionCsvFile, err := os.Open("regions.csv") if err != nil { return fmt.Errorf("region initialize file is not found: %w", err) @@ -145,7 +147,11 @@ func intializeSingularity() error { if err != nil { return fmt.Errorf("singularity account failed to create: %w", err) } - logger.Info().Str("account", "singularity").Str("verifyCode", verifyCode).Msg(fmt.Sprintf("Singularity account created, use %s as verify code to reset password.", verifyCode)) + logger.Info( + fmt.Sprintf("Singularity account created, use %s as verify code to reset password.", verifyCode), + zap.String("account", "singularity"), + zap.String("verifyCode", verifyCode), + ) return nil } @@ -159,11 +165,12 @@ func DBConnectionKeepLive() { } func RedisOrphanCleanup() { + cleanLogger := logger.Named("Cache").With(zap.String("function", "Cleanup")) for range time.Tick(2 * time.Minute) { - logger.Info().Str("process", "Cache").Str("function", "Cleanup").Msg("Proceeding cleanup orphan keys.") + cleanLogger.Info("Proceeding cleanup orphan keys.") err := cache.ClearOrphanRelationItems() if err != nil { - logger.Error().Err(err).Stack().Str("process", "Cache").Str("function", "Cleanup").Msg("Orphan keys clear failed.") + cleanLogger.Error("Orphan keys clear failed.") continue } } diff --git a/router/router.go b/router/router.go index ee07362..e4bec59 100644 --- a/router/router.go +++ b/router/router.go @@ -7,6 +7,7 @@ import ( "electricity_bill_calc/security" "github.com/gin-gonic/gin" + "go.uber.org/zap" ) func Router() *gin.Engine { @@ -41,7 +42,7 @@ func Recover(c *gin.Context) { if r := recover(); r != nil { //打印错误堆栈信息 if err, ok := r.(error); ok { - logger.Error().Err(err).Stack().Msg(err.Error()) + logger.Error(err.Error(), zap.Error(err)) } // response.NewResult(c).Error(500, "服务器内部错误") }