From 4bd9307ea9ee6e39af6185dc7ded9d86f5600170 Mon Sep 17 00:00:00 2001 From: Granty1 Date: Tue, 24 Mar 2020 13:34:03 +0800 Subject: [PATCH] Adjust log module --- QMPlusServer/cmd/windows.go | 8 +- QMPlusServer/config/config.go | 24 ++- QMPlusServer/go.mod | 40 +++-- QMPlusServer/init/initRedis/init_redis.go | 8 +- QMPlusServer/init/initRouter/init_router.go | 18 +- QMPlusServer/init/qmlog/qmlog.go | 43 ----- QMPlusServer/init/qmsql/initMysql.go | 6 +- QMPlusServer/init/registTable/regist_table.go | 4 +- QMPlusServer/main.go | 27 ++- QMPlusServer/middleware/cors.go | 2 +- QMPlusServer/middleware/logger.go | 13 +- QMPlusServer/static/config/config.json | 8 +- .../src/view/superAdmin/autoCode/index.vue | 157 ++++++++++++++++++ 13 files changed, 270 insertions(+), 88 deletions(-) delete mode 100644 QMPlusServer/init/qmlog/qmlog.go create mode 100644 QMPlusVuePage/src/view/superAdmin/autoCode/index.vue diff --git a/QMPlusServer/cmd/windows.go b/QMPlusServer/cmd/windows.go index bb074692..1dbd9a96 100644 --- a/QMPlusServer/cmd/windows.go +++ b/QMPlusServer/cmd/windows.go @@ -3,20 +3,24 @@ package cmd import ( "fmt" "gin-vue-admin/config" + "gin-vue-admin/init/log" "github.com/gin-gonic/gin" "net/http" "time" ) -func RunWindowsServer(Router *gin.Engine) { +func RunWindowsServer(Router *gin.Engine, logger log.Logger) { + address := fmt.Sprintf(":%d", config.GinVueAdminconfig.System.Addr) s := &http.Server{ - Addr: fmt.Sprintf(":%d", config.GinVueAdminconfig.System.Addr), + Addr: address, Handler: Router, ReadTimeout: 10 * time.Second, WriteTimeout: 10 * time.Second, MaxHeaderBytes: 1 << 20, } time.Sleep(10 * time.Microsecond) + logger.Debug("server run success on ", address) + fmt.Printf(`欢迎使用 Gin-Vue-Admin 作者:奇淼 And Spike666 微信:shouzi_1994 diff --git a/QMPlusServer/config/config.go b/QMPlusServer/config/config.go index 60d116fa..ce19ee98 100644 --- a/QMPlusServer/config/config.go +++ b/QMPlusServer/config/config.go @@ -14,6 +14,7 @@ type Config struct { System System `json:"system"` JWT JWT `json:"jwt"` Captcha Captcha `json:"captcha"` + Log Log `json:"log"` } type System struct { // 系统配置 @@ -54,6 +55,27 @@ type Captcha struct { // 验证码配置 ImgHeight int `json:"imgHeight"` } +/** +Log Config + +"CRITICAL" +"ERROR" +"WARNING" +"NOTICE" +"INFO" +"DEBUG" +*/ +type Log struct { + // log 打印的前缀 + Prefix string `json:"prefix"` + // 是否显示打印log的文件具体路径 + LogFile bool `json:"logFile"` + // 在控制台打印log的级别, []默认不打印 + Stdout []string `json:"stdout"` + // 在文件中打印log的级别 []默认不打印 + File []string `json:"file"` +} + var GinVueAdminconfig Config var VTool *viper.Viper @@ -68,7 +90,7 @@ func init() { } v.WatchConfig() v.OnConfigChange(func(e fsnotify.Event) { - fmt.Println("Config file changed:", e.Name) + fmt.Println("config file changed:", e.Name) if err := v.Unmarshal(&GinVueAdminconfig); err != nil { fmt.Println(err) } diff --git a/QMPlusServer/go.mod b/QMPlusServer/go.mod index 2e6f8f9b..59bba837 100644 --- a/QMPlusServer/go.mod +++ b/QMPlusServer/go.mod @@ -3,30 +3,48 @@ module gin-vue-admin go 1.12 require ( - github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc + github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 github.com/casbin/casbin v1.9.1 github.com/casbin/gorm-adapter v1.0.0 github.com/dchest/captcha v0.0.0-20170622155422-6a29415a8364 github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect - github.com/fsnotify/fsnotify v1.4.7 - github.com/gin-gonic/gin v1.4.0 - github.com/go-redis/redis v6.15.6+incompatible + github.com/fsnotify/fsnotify v1.4.9 + github.com/gin-gonic/gin v1.6.1 + github.com/go-openapi/spec v0.19.7 // indirect + github.com/go-openapi/swag v0.19.8 // indirect + github.com/go-redis/redis v6.15.7+incompatible + github.com/go-sql-driver/mysql v1.5.0 // indirect + github.com/golang/protobuf v1.3.5 // indirect github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect - github.com/jinzhu/gorm v1.9.10 + github.com/jinzhu/gorm v1.9.12 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/pkg/errors v0.8.1 + github.com/lib/pq v1.3.0 // indirect + github.com/mailru/easyjson v0.7.1 // indirect + github.com/mitchellh/mapstructure v1.2.2 // indirect + 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 github.com/qiniu/api.v7 v7.2.5+incompatible github.com/qiniu/x v7.0.8+incompatible // indirect - github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 github.com/satori/go.uuid v1.2.0 - github.com/sirupsen/logrus v1.2.0 - github.com/spf13/viper v1.4.0 + github.com/spf13/afero v1.2.2 // indirect + github.com/spf13/cast v1.3.1 // indirect + github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/spf13/viper v1.6.2 github.com/swaggo/gin-swagger v1.2.0 - github.com/swaggo/swag v1.5.1 + github.com/swaggo/swag v1.6.5 github.com/tebeka/strftime v0.1.3 // indirect - github.com/unrolled/secure v1.0.6 + github.com/unrolled/secure v1.0.7 + golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59 // indirect + golang.org/x/net v0.0.0-20200320220750-118fecf932d8 // indirect + golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd // indirect + golang.org/x/tools v0.0.0-20200324003944-a576cf524670 // indirect + gopkg.in/ini.v1 v1.55.0 // indirect qiniupkg.com/x v7.0.8+incompatible // indirect ) diff --git a/QMPlusServer/init/initRedis/init_redis.go b/QMPlusServer/init/initRedis/init_redis.go index 29a8564a..1db86f31 100644 --- a/QMPlusServer/init/initRedis/init_redis.go +++ b/QMPlusServer/init/initRedis/init_redis.go @@ -1,14 +1,14 @@ package initRedis import ( - "fmt" "gin-vue-admin/config" + "gin-vue-admin/init/log" "github.com/go-redis/redis" ) var DEFAULTREDIS *redis.Client -func InitRedis() (client *redis.Client) { +func InitRedis(logger log.Logger) (client *redis.Client) { client = redis.NewClient(&redis.Options{ Addr: config.GinVueAdminconfig.RedisAdmin.Addr, Password: config.GinVueAdminconfig.RedisAdmin.Password, // no password set @@ -16,9 +16,9 @@ func InitRedis() (client *redis.Client) { }) pong, err := client.Ping().Result() if err != nil { - fmt.Println(pong, err) + logger.Error(err) } else { - fmt.Println(pong, err) + logger.Info("redis connect ping response:", pong) DEFAULTREDIS = client } return client diff --git a/QMPlusServer/init/initRouter/init_router.go b/QMPlusServer/init/initRouter/init_router.go index f181706d..5aa1ab94 100644 --- a/QMPlusServer/init/initRouter/init_router.go +++ b/QMPlusServer/init/initRouter/init_router.go @@ -2,6 +2,7 @@ package initRouter import ( _ "gin-vue-admin/docs" + "gin-vue-admin/init/log" "gin-vue-admin/middleware" "gin-vue-admin/router" "github.com/gin-gonic/gin" @@ -10,14 +11,20 @@ import ( ) //初始化总路由 -func InitRouter() *gin.Engine { +func InitRouter(logger log.Logger) *gin.Engine { var Router = gin.Default() + //Router.Use(middleware.LoadTls()) // 打开就能玩https了 - Router.Use(middleware.Logger()) // 如果不需要日志 请关闭这里 - Router.Use(middleware.Cors()) // 跨域 + // 如果不需要日志 请关闭这里 + Router.Use(middleware.LoggerMiddlewareFactory(logger)) + logger.Debug("use middleware logger") + // 跨域 + Router.Use(middleware.CorsMiddlewareFactory()) + logger.Debug("use middleware cors") Router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) - ApiGroup := Router.Group("") // 方便统一添加路由组前缀 多服务器上线使用 - //Router.Use(middleware.Logger()) + logger.Debug("register swagger handler") + // 方便统一添加路由组前缀 多服务器上线使用 + ApiGroup := Router.Group("") router.InitUserRouter(ApiGroup) // 注册用户路由 router.InitBaseRouter(ApiGroup) // 注册基础功能路由 不做鉴权 router.InitMenuRouter(ApiGroup) // 注册menu路由 @@ -29,5 +36,6 @@ func InitRouter() *gin.Engine { router.InitJwtRouter(ApiGroup) // jwt相关路由 router.InitSystemRouter(ApiGroup) // system相关路由 router.InitCustomerRouter(ApiGroup) // 客户路由 + logger.Info("router register success") return Router } diff --git a/QMPlusServer/init/qmlog/qmlog.go b/QMPlusServer/init/qmlog/qmlog.go deleted file mode 100644 index f66f4a8d..00000000 --- a/QMPlusServer/init/qmlog/qmlog.go +++ /dev/null @@ -1,43 +0,0 @@ -package qmlog - -// 日志初始化包 调用qmlog.QMLog.Info 记录日志 24小时切割 日志保存7天 可自行设置 -import ( - "fmt" - "gin-vue-admin/tools" - rotatelogs "github.com/lestrrat/go-file-rotatelogs" - "github.com/rifflock/lfshook" - "github.com/sirupsen/logrus" - "os" - "time" -) - -var QMLog = logrus.New() - -//禁止logrus的输出 -func InitLog() *logrus.Logger { - src, err := os.OpenFile(os.DevNull, os.O_APPEND|os.O_WRONLY, os.ModeAppend) - if err != nil { - fmt.Println("err", err) - } - QMLog.Out = src - QMLog.SetLevel(logrus.DebugLevel) - if ok, _ := tools.PathExists("./log"); !ok { - // Directory not exist - fmt.Println("Create log.") - _ = os.Mkdir("log", os.ModePerm) - } - apiLogPath := "./log/api.log" - logWriter, err := rotatelogs.New( - apiLogPath+".%Y-%m-%d-%H-%M.log", - rotatelogs.WithLinkName(apiLogPath), // 生成软链,指向最新日志文件 - rotatelogs.WithMaxAge(7*24*time.Hour), // 文件最大保存时间 - rotatelogs.WithRotationTime(24*time.Hour), // 日志切割时间间隔 - ) - writeMap := lfshook.WriterMap{ - logrus.InfoLevel: logWriter, - logrus.FatalLevel: logWriter, - } - lfHook := lfshook.NewHook(writeMap, &logrus.JSONFormatter{}) - QMLog.AddHook(lfHook) - return QMLog -} diff --git a/QMPlusServer/init/qmsql/initMysql.go b/QMPlusServer/init/qmsql/initMysql.go index 7a2344fb..1227e855 100644 --- a/QMPlusServer/init/qmsql/initMysql.go +++ b/QMPlusServer/init/qmsql/initMysql.go @@ -2,17 +2,17 @@ package qmsql import ( "gin-vue-admin/config" + "gin-vue-admin/init/log" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" - "log" ) var DEFAULTDB *gorm.DB //初始化数据库并产生数据库全局变量 -func InitMysql(admin config.MysqlAdmin) *gorm.DB { +func InitMysql(admin config.MysqlAdmin, logger log.Logger) *gorm.DB { if db, err := gorm.Open("mysql", admin.Username+":"+admin.Password+"@("+admin.Path+")/"+admin.Dbname+"?"+admin.Config); err != nil { - log.Printf("DEFAULTDB数据库启动异常%S", err) + logger.Error("DEFAULTDB数据库启动异常",err) } else { DEFAULTDB = db DEFAULTDB.DB().SetMaxIdleConns(10) diff --git a/QMPlusServer/init/registTable/regist_table.go b/QMPlusServer/init/registTable/regist_table.go index e402fa23..3920c62d 100644 --- a/QMPlusServer/init/registTable/regist_table.go +++ b/QMPlusServer/init/registTable/regist_table.go @@ -1,13 +1,14 @@ package registTable import ( + "gin-vue-admin/init/log" "gin-vue-admin/model/dbModel" "gin-vue-admin/model/sysModel" "github.com/jinzhu/gorm" ) //注册数据库表专用 -func RegistTable(db *gorm.DB) { +func RegistTable(db *gorm.DB, logger log.Logger) { db.AutoMigrate(sysModel.SysUser{}, sysModel.SysAuthority{}, sysModel.SysMenu{}, @@ -21,4 +22,5 @@ func RegistTable(db *gorm.DB) { dbModel.ExaFileChunk{}, dbModel.ExaCustomer{}, ) + logger.Debug("register table success") } diff --git a/QMPlusServer/main.go b/QMPlusServer/main.go index 2d651508..d695c7cb 100644 --- a/QMPlusServer/main.go +++ b/QMPlusServer/main.go @@ -1,11 +1,12 @@ package main import ( + "fmt" "gin-vue-admin/cmd" "gin-vue-admin/config" "gin-vue-admin/init/initRedis" "gin-vue-admin/init/initRouter" - "gin-vue-admin/init/qmlog" + "gin-vue-admin/init/log/qmlog" "gin-vue-admin/init/qmsql" "gin-vue-admin/init/registTable" //"runtime" @@ -20,15 +21,23 @@ import ( // @BasePath / func main() { - qmlog.InitLog() // 初始化日志 - db := qmsql.InitMysql(config.GinVueAdminconfig.MysqlAdmin) // 链接初始化数据库 + var err error + logger, err := qmlog.NewLogger() + if err != nil { + fmt.Println(err) + } + // 链接初始化数据库 + db := qmsql.InitMysql(config.GinVueAdminconfig.MysqlAdmin, logger) if config.GinVueAdminconfig.System.UseMultipoint { - _ = initRedis.InitRedis() // 初始化redis服务 + // 初始化redis服务 + _ = initRedis.InitRedis(logger) } - registTable.RegistTable(db) // 注册数据库表 - defer qmsql.DEFAULTDB.Close() // 程序结束前关闭数据库链接 - Router := initRouter.InitRouter() // 注册路由 - qmlog.QMLog.Info("服务器开启") // 日志测试代码 + // 注册数据库表 + registTable.RegistTable(db, logger) + // 程序结束前关闭数据库链接 + defer qmsql.DEFAULTDB.Close() + // 注册路由 + Router := initRouter.InitRouter(logger) //Router.RunTLS(":443","ssl.pem", "ssl.key") // https支持 需要添加中间件 //sysType := runtime.GOOS // @@ -38,6 +47,6 @@ func main() { //} //if sysType == "windows" { // WIN系统 - cmd.RunWindowsServer(Router) + cmd.RunWindowsServer(Router, logger) //} } diff --git a/QMPlusServer/middleware/cors.go b/QMPlusServer/middleware/cors.go index 16917e8a..87a8a97a 100644 --- a/QMPlusServer/middleware/cors.go +++ b/QMPlusServer/middleware/cors.go @@ -6,7 +6,7 @@ import ( ) // 处理跨域请求,支持options访问 -func Cors() gin.HandlerFunc { +func CorsMiddlewareFactory() gin.HandlerFunc { return func(c *gin.Context) { method := c.Request.Method c.Header("Access-Control-Allow-Origin", "*") diff --git a/QMPlusServer/middleware/logger.go b/QMPlusServer/middleware/logger.go index 0ec4bb6c..2368d0b4 100644 --- a/QMPlusServer/middleware/logger.go +++ b/QMPlusServer/middleware/logger.go @@ -2,7 +2,7 @@ package middleware import ( "bytes" - "gin-vue-admin/init/qmlog" + "gin-vue-admin/init/log" "net/http/httputil" "strings" "time" @@ -10,8 +10,7 @@ import ( "github.com/gin-gonic/gin" ) -func Logger() gin.HandlerFunc { - log := qmlog.QMLog +func LoggerMiddlewareFactory(logger log.Logger) gin.HandlerFunc { return func(c *gin.Context) { // request time start := time.Now() @@ -28,8 +27,8 @@ func Logger() gin.HandlerFunc { // copy request content req, _ := httputil.DumpRequest(c.Request, true) if logFlag { - log.Infof(`| %s | %s | %s | %5s | %s\n`, - `Request :`, method, clientIP, path, string(req)) + logger.Debug( + "Request:", method, clientIP, path, string(req)) } // replace writer cusWriter := &responseBodyWriter{ @@ -45,8 +44,8 @@ func Logger() gin.HandlerFunc { latency := end.Sub(start) statusCode := c.Writer.Status() if logFlag { - log.Infof(`| %s | %3d | %13v | %s \n`, - `Response:`, + logger.Debug( + "Response:", statusCode, latency, cusWriter.body.String()) diff --git a/QMPlusServer/static/config/config.json b/QMPlusServer/static/config/config.json index ccdec3c7..9dd0ce08 100644 --- a/QMPlusServer/static/config/config.json +++ b/QMPlusServer/static/config/config.json @@ -7,7 +7,7 @@ }, "mysqladmin": { "username": "root", - "password": "Aa@6447985", + "password": "YINGL19980716.", "path": "127.0.0.1:3306", "dbname": "qmPlus", "config": "charset=utf8\u0026parseTime=True\u0026loc=Local" @@ -30,5 +30,11 @@ "keyLong": 6, "imgWidth": 120, "imgHeight": 40 + }, + "log": { + "prefix": "[GIN-VUE-ADMIN]", + "logFile": false, + "stdout": ["DEBUG"], + "file": ["WARNING"] } } \ No newline at end of file diff --git a/QMPlusVuePage/src/view/superAdmin/autoCode/index.vue b/QMPlusVuePage/src/view/superAdmin/autoCode/index.vue new file mode 100644 index 00000000..5bfdc469 --- /dev/null +++ b/QMPlusVuePage/src/view/superAdmin/autoCode/index.vue @@ -0,0 +1,157 @@ + + + \ No newline at end of file -- GitLab