feat(log):日志系统切换至zap。
This commit is contained in:
parent
d38b6ab064
commit
46494dd46e
7
go.mod
7
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
|
||||
)
|
||||
|
|
13
go.sum
13
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=
|
||||
|
|
126
logger/logger.go
126
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()
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
39
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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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, "服务器内部错误")
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user