feat(log):日志系统切换至zap。

This commit is contained in:
徐涛 2022-09-08 16:10:08 +08:00
parent d38b6ab064
commit 46494dd46e
7 changed files with 175 additions and 95 deletions

7
go.mod
View File

@ -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
)

13
go.sum
View File

@ -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=

View File

@ -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()
}

View File

@ -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)
}
}

View File

@ -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
}
}

39
main.go
View File

@ -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
}
}

View File

@ -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, "服务器内部错误")
}