diff --git a/server/config.yaml b/server/config.yaml index b39b1d07a61b47c4c197be448fca7282d98e60b2..abf6d5dfe1f52756ccf4a6e0acfc05db6ee01f3b 100644 --- a/server/config.yaml +++ b/server/config.yaml @@ -73,7 +73,10 @@ zap: # console: 控制台, json: json格式输出 format: 'console' prefix: '[GIN-VUE-ADMIN]' - director: 'logs' - link_name: 'ZapLatestLog' + director: 'log' + link_name: 'latest_log' show_line: true + # LowercaseLevelEncoder:小写, LowercaseColorLevelEncoder:小写带颜色,CapitalLevelEncoder: 大写, CapitalColorLevelEncoder: 大写带颜色, + encode_level: 'LowercaseColorLevelEncoder' + stacktrace_key: 'stacktrace' log_in_console: true \ No newline at end of file diff --git a/server/config/config.go b/server/config/config.go index 147bfabd4ff2d1b647875e49a432c496ef5d3cda..d91cf21d02ae9b50e6b5b3a9c2fe7a291a5bdb4f 100644 --- a/server/config/config.go +++ b/server/config/config.go @@ -1,16 +1,15 @@ package config type Server struct { - Mysql Mysql `mapstructure:"mysql" json:"mysql" yaml:"mysql"` - Sqlite Sqlite `mapstructure:"sqlite" json:"sqlite" yaml:"sqlite"` - Qiniu Qiniu `mapstructure:"qiniu" json:"qiniu" yaml:"qiniu"` - Casbin Casbin `mapstructure:"casbin" json:"casbin" yaml:"casbin"` - Redis Redis `mapstructure:"redis" json:"redis" yaml:"redis"` - System System `mapstructure:"system" json:"system" yaml:"system"` - JWT JWT `mapstructure:"jwt" json:"jwt" yaml:"jwt"` - Captcha Captcha `mapstructure:"captcha" json:"captcha" yaml:"captcha"` - Log Log `mapstructure:"log" json:"log" yaml:"log"` - Zap Zap `mapstructure:"zap" json:"zap" yaml:"zap"` + Mysql Mysql `mapstructure:"mysql" json:"mysql" yaml:"mysql"` + Sqlite Sqlite `mapstructure:"sqlite" json:"sqlite" yaml:"sqlite"` + Qiniu Qiniu `mapstructure:"qiniu" json:"qiniu" yaml:"qiniu"` + Casbin Casbin `mapstructure:"casbin" json:"casbin" yaml:"casbin"` + Redis Redis `mapstructure:"redis" json:"redis" yaml:"redis"` + System System `mapstructure:"system" json:"system" yaml:"system"` + JWT JWT `mapstructure:"jwt" json:"jwt" yaml:"jwt"` + Captcha Captcha `mapstructure:"captcha" json:"captcha" yaml:"captcha"` + Zap Zap `mapstructure:"zap" json:"zap" yaml:"zap"` LocalUpload LocalUpload `mapstructure:"localUpload" json:"localUpload" yaml:"localUpload"` } @@ -47,9 +46,9 @@ type Redis struct { } type LocalUpload struct { - Local bool `mapstructure:"local" json:"local" yaml:"local"` + Local bool `mapstructure:"local" json:"local" yaml:"local"` AvatarPath string `mapstructure:"avatar-path" json:"avatarPath" yaml:"avatar-path"` - FilePath string `mapstructure:"file-path" json:"filePath" yaml:"file-path"` + FilePath string `mapstructure:"file-path" json:"filePath" yaml:"file-path"` } type Qiniu struct { @@ -65,13 +64,6 @@ type Captcha struct { ImgHeight int `mapstructure:"img-height" json:"imgHeight" yaml:"img-height"` } -type Log struct { - Prefix string `mapstructure:"prefix" json:"prefix" yaml:"prefix"` - LogFile bool `mapstructure:"log-file" json:"logFile" yaml:"log-file"` - Stdout string `mapstructure:"stdout" json:"stdout" yaml:"stdout"` - File string `mapstructure:"file" json:"file" yaml:"file"` -} - type Sqlite struct { Username string `mapstructure:"username" json:"username" yaml:"username"` Password string `mapstructure:"password" json:"password" yaml:"password"` @@ -81,11 +73,13 @@ type Sqlite struct { } type Zap struct { - Level string `mapstructure:"level" json:"level" yaml:"level"` - Format string `mapstructure:"format" json:"format" yaml:"format"` - Prefix string `mapstructure:"prefix" json:"prefix" yaml:"prefix"` - Director string `mapstructure:"director" json:"director" yaml:"director"` - LinkName string `mapstructure:"link_name" json:"linkName" yaml:"link_name"` - ShowLine bool `mapstructure:"show_line" json:"show_line" yaml:"show_line"` - LogInConsole bool `mapstructure:"log_in_console" json:"logInConsole" yaml:"log_in_console"` + Level string `mapstructure:"level" json:"level" yaml:"level"` + Format string `mapstructure:"format" json:"format" yaml:"format"` + Prefix string `mapstructure:"prefix" json:"prefix" yaml:"prefix"` + Director string `mapstructure:"director" json:"director" yaml:"director"` + LinkName string `mapstructure:"link_name" json:"linkName" yaml:"link_name"` + ShowLine bool `mapstructure:"show_line" json:"showLine" yaml:"showLine"` + EncodeLevel string `mapstructure:"encode_level" json:"encodeLevel" yaml:"encode_level"` + StacktraceKey string `mapstructure:"stacktrace_key" json:"stacktraceKey" yaml:"stacktrace_key"` + LogInConsole bool `mapstructure:"log_in_console" json:"logInConsole" yaml:"log_in_console"` } diff --git a/server/core/log.go b/server/core/log.go deleted file mode 100644 index cdb14a47ff958fb6dd9ee4c19c34ee4986f6184b..0000000000000000000000000000000000000000 --- a/server/core/log.go +++ /dev/null @@ -1,107 +0,0 @@ -package core - -import ( - "fmt" - "gin-vue-admin/config" - "gin-vue-admin/global" - "gin-vue-admin/utils" - "github.com/gin-gonic/gin" - rotatelogs "github.com/lestrrat/go-file-rotatelogs" - oplogging "github.com/op/go-logging" - "io" - "os" - "strings" - "time" -) - -const ( - logDir = "log" - logSoftLink = "latest_log" - module = "gin-vue-admin" -) - -var ( - defaultFormatter = `%{time:2006/01/02 - 15:04:05.000} %{longfile} %{color:bold}▶ [%{level:.6s}] %{message}%{color:reset}` -) - -func init() { - c := global.GVA_CONFIG.Log - if c.Prefix == "" { - _ = fmt.Errorf("logger prefix not found") - } - logger := oplogging.MustGetLogger(module) - var backends []oplogging.Backend - registerStdout(c, &backends) - if fileWriter := registerFile(c, &backends); fileWriter != nil { - gin.DefaultWriter = io.MultiWriter(fileWriter, os.Stdout) - } - oplogging.SetBackend(backends...) - global.GVA_LOG = logger -} - -func registerStdout(c config.Log, backends *[]oplogging.Backend) { - if c.Stdout != "" { - level, err := oplogging.LogLevel(c.Stdout) - if err != nil { - fmt.Println(err) - } - *backends = append(*backends, createBackend(os.Stdout, c, level)) - } -} - -func registerFile(c config.Log, backends *[]oplogging.Backend) io.Writer { - if c.File != "" { - if ok, _ := utils.PathExists(logDir); !ok { - // directory not exist - fmt.Println("create log directory") - _ = os.Mkdir(logDir, os.ModePerm) - } - fileWriter, err := rotatelogs.New( - logDir+string(os.PathSeparator)+"%Y-%m-%d-%H-%M.log", - // generate soft link, point to latest log file - rotatelogs.WithLinkName(logSoftLink), - // maximum time to save log files - rotatelogs.WithMaxAge(7*24*time.Hour), - // time period of log file switching - rotatelogs.WithRotationTime(24*time.Hour), - ) - if err != nil { - fmt.Println(err) - } - level, err := oplogging.LogLevel(c.File) - if err != nil { - fmt.Println(err) - } - *backends = append(*backends, createBackend(fileWriter, c, level)) - - return fileWriter - } - return nil -} - -func createBackend(w io.Writer, c config.Log, level oplogging.Level) oplogging.Backend { - backend := oplogging.NewLogBackend(w, c.Prefix, 0) - stdoutWriter := false - if w == os.Stdout { - stdoutWriter = true - } - format := getLogFormatter(c, stdoutWriter) - backendLeveled := oplogging.AddModuleLevel(oplogging.NewBackendFormatter(backend, format)) - backendLeveled.SetLevel(level, module) - return backendLeveled -} - -func getLogFormatter(c config.Log, stdoutWriter bool) oplogging.Formatter { - pattern := defaultFormatter - if !stdoutWriter { - // Color is only required for console output - // Other writers don't need %{color} tag - pattern = strings.Replace(pattern, "%{color:bold}", "", -1) - pattern = strings.Replace(pattern, "%{color:reset}", "", -1) - } - if !c.LogFile { - // Remove %{logfile} tag - pattern = strings.Replace(pattern, "%{longfile}", "", -1) - } - return oplogging.MustStringFormatter(pattern) -} diff --git a/server/core/server.go b/server/core/server.go index e7e1cf7eba7f03d5eb481d61dfdea179eb591ae2..32526f0b3443b133c97fc37142d835cb516b0a6a 100644 --- a/server/core/server.go +++ b/server/core/server.go @@ -4,6 +4,7 @@ import ( "fmt" "gin-vue-admin/global" "gin-vue-admin/initialize" + "go.uber.org/zap" "time" ) @@ -24,11 +25,11 @@ func RunWindowsServer() { // 保证文本顺序输出 // In order to ensure that the text order output can be deleted time.Sleep(10 * time.Microsecond) - global.GVA_LOG.Debug("server run success on ", address) + global.GVA_LOG.Debug("server run success on ", zap.String("address", address)) fmt.Printf(`欢迎使用 Gin-Vue-Admin 默认自动化文档地址:http://127.0.0.1%s/swagger/index.html 默认前端文件运行地址:http://127.0.0.1:8080 `, address) - global.GVA_LOG.Error(s.ListenAndServe()) + global.GVA_LOG.Error(s.ListenAndServe().Error()) } diff --git a/server/core/zap.go b/server/core/zap.go index 128ef9f2ff86dd7c9c202c5a83809a148151c0b8..fc68a4746ad499f95c7e4c6e52780af0b3feedaa 100644 --- a/server/core/zap.go +++ b/server/core/zap.go @@ -13,17 +13,17 @@ import ( var ( err error - level zapcore.Level + level zapcore.Level writer zapcore.WriteSyncer ) func init() { - if ok, _ := utils.PathExists(global.GVA_CONFIG.Zap.Director); !ok { // 判断是否有logs文件夹 - fmt.Println("create logs directory") // directory not exist + if ok, _ := utils.PathExists(global.GVA_CONFIG.Zap.Director); !ok { // 判断是否有Director文件夹 + fmt.Printf("create %v directory\n", global.GVA_CONFIG.Zap.Director) _ = os.Mkdir(global.GVA_CONFIG.Zap.Director, os.ModePerm) } - switch global.GVA_CONFIG.Zap.Level {// 初始化配置文件的Level + switch global.GVA_CONFIG.Zap.Level { // 初始化配置文件的Level case "debug": level = zap.DebugLevel case "info": @@ -32,6 +32,12 @@ func init() { level = zap.WarnLevel case "error": level = zap.ErrorLevel + case "dpanic": + level = zap.DPanicLevel + case "panic": + level = zap.PanicLevel + case "fatal": + level = zap.FatalLevel default: level = zap.InfoLevel } @@ -43,23 +49,19 @@ func init() { } if level == zap.DebugLevel || level == zap.ErrorLevel { - global.GVA_ZAP = zap.New(getEncoderCore(), zap.AddStacktrace(level)) - if global.GVA_CONFIG.Zap.ShowLine { - global.GVA_ZAP.WithOptions(zap.AddCaller()) - } - return + global.GVA_LOG = zap.New(getEncoderCore(), zap.AddStacktrace(level)) + } else { + global.GVA_LOG = zap.New(getEncoderCore()) } - global.GVA_ZAP = zap.New(getEncoderCore()) if global.GVA_CONFIG.Zap.ShowLine { - global.GVA_ZAP.WithOptions(zap.AddCaller()) + global.GVA_LOG.WithOptions(zap.AddCaller()) } - } // getWriteSyncer zap logger中加入file-rotatelogs func getWriteSyncer() (zapcore.WriteSyncer, error) { fileWriter, err := zaprotatelogs.New( - global.GVA_CONFIG.Zap.Director+string(os.PathSeparator)+"%Y-%m-%d-%H-%M.log", + global.GVA_CONFIG.Zap.Director+string(os.PathSeparator)+"%Y-%m-%d.log", zaprotatelogs.WithLinkName(global.GVA_CONFIG.Zap.LinkName), zaprotatelogs.WithMaxAge(7*24*time.Hour), zaprotatelogs.WithRotationTime(24*time.Hour), @@ -78,18 +80,41 @@ func getEncoderConfig() (config zapcore.EncoderConfig) { TimeKey: "time", NameKey: "logger", CallerKey: "caller", - StacktraceKey: "stacktrace", + StacktraceKey: global.GVA_CONFIG.Zap.StacktraceKey, LineEnding: zapcore.DefaultLineEnding, - EncodeLevel: zapcore.CapitalColorLevelEncoder, + EncodeLevel: zapcore.CapitalLevelEncoder, EncodeTime: CustomTimeEncoder, EncodeDuration: zapcore.SecondsDurationEncoder, EncodeCaller: zapcore.FullCallerEncoder, } + switch { + case global.GVA_CONFIG.Zap.EncodeLevel == "LowercaseLevelEncoder" && global.GVA_CONFIG.Zap.Format == "console" : // console小写编码器 + config.EncodeLevel = zapcore.LowercaseLevelEncoder + case global.GVA_CONFIG.Zap.EncodeLevel == "LowercaseLevelEncoder" && global.GVA_CONFIG.Zap.Format == "json" : // json小写编码器 + config.EncodeLevel = zapcore.LowercaseLevelEncoder + case global.GVA_CONFIG.Zap.EncodeLevel == "LowercaseColorLevelEncoder" && global.GVA_CONFIG.Zap.Format == "console": // console小写编码器带颜色 + config.EncodeLevel = zapcore.LowercaseColorLevelEncoder + case global.GVA_CONFIG.Zap.EncodeLevel == "LowercaseColorLevelEncoder" && global.GVA_CONFIG.Zap.Format == "json": // json小写编码器带颜色 + config.EncodeLevel = zapcore.LowercaseColorLevelEncoder + case global.GVA_CONFIG.Zap.EncodeLevel == "CapitalLevelEncoder" && global.GVA_CONFIG.Zap.Format == "console": // console大写编码器 + config.EncodeLevel = zapcore.CapitalLevelEncoder + case global.GVA_CONFIG.Zap.EncodeLevel == "CapitalLevelEncoder" && global.GVA_CONFIG.Zap.Format == "json": // json大写编码器 + config.EncodeLevel = zapcore.CapitalLevelEncoder + case global.GVA_CONFIG.Zap.EncodeLevel == "CapitalColorLevelEncoder" && global.GVA_CONFIG.Zap.Format == "console": // console 大写编码器带颜色 + config.EncodeLevel = zapcore.CapitalColorLevelEncoder + case global.GVA_CONFIG.Zap.EncodeLevel == "CapitalColorLevelEncoder" && global.GVA_CONFIG.Zap.Format == "json": // json 大写编码器带颜色 + config.EncodeLevel = zapcore.CapitalColorLevelEncoder + default: + config.EncodeLevel = zapcore.LowercaseLevelEncoder + } return config } // getEncoder 获取zapcore.Encoder func getEncoder() zapcore.Encoder { + if global.GVA_CONFIG.Zap.Format == "json" { + return zapcore.NewJSONEncoder(getEncoderConfig()) + } return zapcore.NewConsoleEncoder(getEncoderConfig()) } @@ -100,5 +125,5 @@ func getEncoderCore() (core zapcore.Core) { // 自定义日志输出时间格式 func CustomTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) { - enc.AppendString(t.Format(global.GVA_CONFIG.Zap.Prefix+"2006/01/02 - 15:04:05.000")) + enc.AppendString(t.Format(global.GVA_CONFIG.Zap.Prefix + "2006/01/02 - 15:04:05.000")) } diff --git a/server/global/global.go b/server/global/global.go index d592bb190d8edf21827b48a8d19f159615ca94b8..3d01031a5c12cb6ae74701efa72e7994240d0512 100644 --- a/server/global/global.go +++ b/server/global/global.go @@ -5,7 +5,6 @@ import ( "gin-vue-admin/config" "github.com/go-redis/redis" - oplogging "github.com/op/go-logging" "github.com/spf13/viper" "gorm.io/gorm" ) @@ -15,6 +14,6 @@ var ( GVA_REDIS *redis.Client GVA_CONFIG config.Server GVA_VP *viper.Viper - GVA_LOG *oplogging.Logger - GVA_ZAP *zap.Logger + //GVA_LOG *oplogging.Logger + GVA_LOG *zap.Logger ) diff --git a/server/go.mod b/server/go.mod index 7c413b0d4c707736d2977ad58073c16262ea12c5..7686a4967fad7206025e2d5dde8ffd431029b105 100644 --- a/server/go.mod +++ b/server/go.mod @@ -23,14 +23,12 @@ require ( github.com/lestrrat-go/file-rotatelogs v2.3.0+incompatible github.com/lestrrat-go/strftime v1.0.3 // indirect github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570 // indirect - github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042 // indirect github.com/mailru/easyjson v0.7.1 // indirect github.com/mitchellh/mapstructure v1.2.2 // indirect github.com/mojocn/base64Captcha v1.3.1 github.com/onsi/ginkgo v1.7.0 // indirect github.com/onsi/gomega v1.4.3 // indirect - github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 github.com/pelletier/go-toml v1.6.0 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/qiniu/api.v7/v7 v7.4.1 diff --git a/server/initialize/data.go b/server/initialize/data.go index b7010c826b6b9398a3faac81d6ddf36001e462a6..9da0005e24d0667d6678ea741cdb01f6ad226090 100644 --- a/server/initialize/data.go +++ b/server/initialize/data.go @@ -3,6 +3,7 @@ package initialize import ( "gin-vue-admin/global" "gin-vue-admin/service" + "go.uber.org/zap" ) func Data() { @@ -20,7 +21,7 @@ func Data() { err = service.InitSysDictionaryDetail() err = service.InitExaFileUploadAndDownload() if err != nil { - global.GVA_LOG.Error("initialize data failed", err) + global.GVA_LOG.Error("initialize data failed", zap.Any("err", err)) } global.GVA_LOG.Debug("initialize data success") } diff --git a/server/initialize/db_table.go b/server/initialize/db_table.go index edadb04ea916e7cc435c404614ae5eef6f637c9a..f694c216e40bdfc225a4f7d47338160593bc8f51 100644 --- a/server/initialize/db_table.go +++ b/server/initialize/db_table.go @@ -3,6 +3,7 @@ package initialize import ( "gin-vue-admin/global" "gin-vue-admin/model" + "go.uber.org/zap" "os" ) @@ -28,7 +29,7 @@ func DBTables() { model.SysOperationRecord{}, ) if err != nil { - global.GVA_LOG.Error("register table failed", err) + global.GVA_LOG.Error("register table failed", zap.Any("err", err)) os.Exit(0) } global.GVA_LOG.Debug("register table success") diff --git a/server/initialize/mysql.go b/server/initialize/mysql.go index 7cbe0077ea67fce9eb553828669a778352d86399..83f52a10b9c9cc0c1fbbd9383614b211bb1ca4f2 100644 --- a/server/initialize/mysql.go +++ b/server/initialize/mysql.go @@ -2,6 +2,7 @@ package initialize import ( "gin-vue-admin/global" + "go.uber.org/zap" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" @@ -33,7 +34,7 @@ func Mysql() { } if db, err := gorm.Open(mysql.New(mysqlConfig), gormConfig); err != nil { - global.GVA_LOG.Error("MySQL启动异常", err) + global.GVA_LOG.Error("MySQL启动异常", zap.Any("err", err)) os.Exit(0) } else { global.GVA_DB = db diff --git a/server/initialize/redis.go b/server/initialize/redis.go index fc87dcbf47433d59d5c921b95d796ac1bca785a9..f5fbaaf327d9be9daebdbf2e59a8a75851372228 100644 --- a/server/initialize/redis.go +++ b/server/initialize/redis.go @@ -3,6 +3,7 @@ package initialize import ( "gin-vue-admin/global" "github.com/go-redis/redis" + "go.uber.org/zap" ) func Redis() { @@ -14,9 +15,9 @@ func Redis() { }) pong, err := client.Ping().Result() if err != nil { - global.GVA_LOG.Error(err) + global.GVA_LOG.Error("redis connect ping failed, err:", zap.Any("err", err)) } else { - global.GVA_LOG.Info("redis connect ping response:", pong) + global.GVA_LOG.Info("redis connect ping response:", zap.String("pong",pong)) global.GVA_REDIS = client } } diff --git a/server/middleware/error.go b/server/middleware/error.go index ad9f4962bb583d5ed7d261dbc92f95b0dbba210d..a9a0e4a3944dd3a272834497652097ad39acc776 100644 --- a/server/middleware/error.go +++ b/server/middleware/error.go @@ -30,7 +30,7 @@ func GinRecovery(stack bool) gin.HandlerFunc { httpRequest, _ := httputil.DumpRequest(c.Request, false) if brokenPipe { - global.GVA_ZAP.Error(c.Request.URL.Path, + global.GVA_LOG.Error(c.Request.URL.Path, zap.Any("error", err), zap.String("request", string(httpRequest)), ) @@ -41,13 +41,13 @@ func GinRecovery(stack bool) gin.HandlerFunc { } if stack { - global.GVA_ZAP.Error("[Recovery from panic]", + global.GVA_LOG.Error("[Recovery from panic]", zap.Any("error", err), zap.String("request", string(httpRequest)), zap.String("stack", string(debug.Stack())), ) } else { - global.GVA_ZAP.Error("[Recovery from panic]", + global.GVA_LOG.Error("[Recovery from panic]", zap.Any("error", err), zap.String("request", string(httpRequest)), ) diff --git a/server/middleware/jwt.go b/server/middleware/jwt.go index b85bfbb1e1bb90bebb0d2a11a2424a82aeb2a125..aa2c48b7fa27172191365c6091db4d9beeb50050 100644 --- a/server/middleware/jwt.go +++ b/server/middleware/jwt.go @@ -9,6 +9,7 @@ import ( "gin-vue-admin/service" "github.com/dgrijalva/jwt-go" "github.com/gin-gonic/gin" + "go.uber.org/zap" "strconv" "time" ) @@ -57,7 +58,7 @@ func JWTAuth() gin.HandlerFunc { if global.GVA_CONFIG.System.UseMultipoint { err,RedisJwtToken := service.GetRedisJWT(newClaims.Username) if err!=nil { - global.GVA_LOG.Error(err) + global.GVA_LOG.Error("get redis jwt failed", zap.Any("err", err)) }else{ service.JsonInBlacklist(model.JwtBlacklist{Jwt: RedisJwtToken}) //当之前的取成功时才进行拉黑操作 diff --git a/server/middleware/operation.go b/server/middleware/operation.go index 520d579dedf201683e1f78c4899454e924916ff6..f123466e80f44294c101e1b229f0b1ad4d6c7b84 100644 --- a/server/middleware/operation.go +++ b/server/middleware/operation.go @@ -6,6 +6,7 @@ import ( "gin-vue-admin/model" "gin-vue-admin/service" "github.com/gin-gonic/gin" + "go.uber.org/zap" "io/ioutil" "net/http" "strconv" @@ -19,7 +20,7 @@ func OperationRecord() gin.HandlerFunc { var err error body, err = ioutil.ReadAll(c.Request.Body) if err != nil { - global.GVA_LOG.Error("read body from request error:", err) + global.GVA_LOG.Error("read body from request error:", zap.Any("err", err)) } else { c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(body)) } @@ -52,7 +53,7 @@ func OperationRecord() gin.HandlerFunc { record.Resp = writer.body.String() if err := service.CreateSysOperationRecord(record); err != nil { - global.GVA_LOG.Error("create operation record error:", err) + global.GVA_LOG.Error("create operation record error:", zap.Any("err", err)) } } } diff --git a/server/utils/directory.go b/server/utils/directory.go index d0e1c78137dcfabe7e1453c2cbce45f22db2faa7..caf51e04097c4b261a4aa899dffc3515202c438f 100644 --- a/server/utils/directory.go +++ b/server/utils/directory.go @@ -2,6 +2,7 @@ package utils import ( "gin-vue-admin/global" + "go.uber.org/zap" "os" ) @@ -35,10 +36,10 @@ func CreateDir(dirs ...string) (err error) { return err } if !exist { - global.GVA_LOG.Debug("create directory ", v) + global.GVA_LOG.Debug("create directory" + v) err = os.MkdirAll(v, os.ModePerm) if err != nil { - global.GVA_LOG.Error("create directory", v, " error:", err) + global.GVA_LOG.Error("create directory"+ v, zap.Any(" error:", err)) } } } diff --git a/server/utils/upload_avatar_local.go b/server/utils/upload_avatar_local.go index 741a50f18b0dd9d21f1581a236681ea7542668a9..b808187718e0e41f749f15a32dfc105f1f5cbb53 100644 --- a/server/utils/upload_avatar_local.go +++ b/server/utils/upload_avatar_local.go @@ -2,6 +2,7 @@ package utils import ( "gin-vue-admin/global" + "go.uber.org/zap" "io" "mime/multipart" "os" @@ -23,7 +24,7 @@ func UploadAvatarLocal(file *multipart.FileHeader) (err error, localPath string, // 尝试创建此路径 err = os.MkdirAll(savePath, os.ModePerm) if err != nil{ - global.GVA_LOG.Error("upload local file fail:", err) + global.GVA_LOG.Error("upload local file fail:", zap.Any("err", err)) return err, "", "" } // 拼接路径和文件名 @@ -32,21 +33,21 @@ func UploadAvatarLocal(file *multipart.FileHeader) (err error, localPath string, // 打开文件 defer 关闭 src, err := file.Open() if err != nil { - global.GVA_LOG.Error("upload local file fail:", err) + global.GVA_LOG.Error("upload local file fail:", zap.Any("err", err)) return err, "", "" } defer src.Close() // 创建文件 defer 关闭 out, err := os.Create(dst) if err != nil { - global.GVA_LOG.Error("upload local file fail:", err) + global.GVA_LOG.Error("upload local file fail:", zap.Any("err", err)) return err, "", "" } defer out.Close() // 传输(拷贝)文件 _, err = io.Copy(out, src) if err != nil { - global.GVA_LOG.Error("upload local file fail:", err) + global.GVA_LOG.Error("upload local file fail:", zap.Any("err", err)) return err, "", "" } return nil, dst, lastName diff --git a/server/utils/upload_file_local.go b/server/utils/upload_file_local.go index 8a103fefcb5df502b8da04ad4adb5b43d0a0f208..22a5b83294fdb26e2007912d731e99eec865b691 100644 --- a/server/utils/upload_file_local.go +++ b/server/utils/upload_file_local.go @@ -2,6 +2,7 @@ package utils import ( "gin-vue-admin/global" + "go.uber.org/zap" "io" "mime/multipart" "os" @@ -22,8 +23,8 @@ func UploadFileLocal(file *multipart.FileHeader) (err error, localPath string, k savePath := global.GVA_CONFIG.LocalUpload.FilePath // 尝试创建此路径 err = os.MkdirAll(savePath, os.ModePerm) - if err != nil{ - global.GVA_LOG.Error("upload local file fail:", err) + if err != nil { + global.GVA_LOG.Error("upload local file fail:", zap.Any("err", err)) return err, "", "" } // 拼接路径和文件名 @@ -32,21 +33,21 @@ func UploadFileLocal(file *multipart.FileHeader) (err error, localPath string, k // 打开文件 defer 关闭 src, err := file.Open() if err != nil { - global.GVA_LOG.Error("upload local file fail:", err) + global.GVA_LOG.Error("upload local file fail:", zap.Any("err", err)) return err, "", "" } defer src.Close() // 创建文件 defer 关闭 out, err := os.Create(dst) if err != nil { - global.GVA_LOG.Error("upload local file fail:", err) + global.GVA_LOG.Error("upload local file fail:", zap.Any("err", err)) return err, "", "" } defer out.Close() // 传输(拷贝)文件 _, err = io.Copy(out, src) if err != nil { - global.GVA_LOG.Error("upload local file fail:", err) + global.GVA_LOG.Error("upload local file fail:", zap.Any("err", err)) return err, "", "" } return nil, dst, lastName diff --git a/server/utils/upload_remote.go b/server/utils/upload_remote.go index 0093071bbd065a308b4ab2e17f933f64c723e0ed..681b81c974459177d0404be9ef77ce707bb8ef23 100644 --- a/server/utils/upload_remote.go +++ b/server/utils/upload_remote.go @@ -6,6 +6,7 @@ import ( "gin-vue-admin/global" "github.com/qiniu/api.v7/v7/auth/qbox" "github.com/qiniu/api.v7/v7/storage" + "go.uber.org/zap" "mime/multipart" "time" ) @@ -40,7 +41,7 @@ func UploadRemote(file *multipart.FileHeader) (err error, path string, key strin fileKey := fmt.Sprintf("%d%s", time.Now().Unix(), file.Filename) // 文件名格式 自己可以改 建议保证唯一性 err = formUploader.Put(context.Background(), &ret, upToken, fileKey, f, dataLen, &putExtra) if err != nil { - global.GVA_LOG.Error("upload file fail:", err) + global.GVA_LOG.Error("upload file fail:", zap.Any("err", err)) return err, "", "" } return err, global.GVA_CONFIG.Qiniu.ImgPath + "/" + ret.Key, ret.Key