Refine some structs and handle cycle import
This commit is contained in:
@@ -1,103 +0,0 @@
|
||||
package init
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"gin-vue-admin/global"
|
||||
"github.com/fsnotify/fsnotify"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
MysqlAdmin MysqlAdmin `json:"mysqlAdmin"`
|
||||
Qiniu Qiniu `json:"qiniu"`
|
||||
CasbinConfig CasbinConfig `json:"casbinConfig"`
|
||||
RedisAdmin RedisAdmin `json:"redisAdmin"`
|
||||
System System `json:"system"`
|
||||
JWT JWT `json:"jwt"`
|
||||
Captcha Captcha `json:"captcha"`
|
||||
Log Log `json:"log"`
|
||||
}
|
||||
|
||||
type System struct { // 系统配置
|
||||
UseMultipoint bool `json:"useMultipoint"`
|
||||
Env string `json:"env"`
|
||||
Addr int `json:"addr"`
|
||||
}
|
||||
|
||||
type JWT struct { // jwt签名
|
||||
SigningKey string `json:"signingKey"`
|
||||
}
|
||||
|
||||
type CasbinConfig struct { //casbin配置
|
||||
ModelPath string `json:"modelPath"` // casbin model地址配置
|
||||
}
|
||||
|
||||
type MysqlAdmin struct { // mysql admin 数据库配置
|
||||
Username string `json:"username"`
|
||||
Password string `json:"password"`
|
||||
Path string `json:"path"`
|
||||
Dbname string `json:"dbname"`
|
||||
Config string `json:"config"`
|
||||
MaxIdleConns int `json:"maxIdleConns"`
|
||||
MaxOpenConns int `json:"maxOpenConns"`
|
||||
LogMode bool `json:"maxOpenConns"`
|
||||
}
|
||||
|
||||
type RedisAdmin struct { // Redis admin 数据库配置
|
||||
Addr string `json:"addr"`
|
||||
Password string `json:"password"`
|
||||
DB int `json:"db"`
|
||||
}
|
||||
type Qiniu struct { // 七牛 密钥配置
|
||||
AccessKey string `json:"accessKey"`
|
||||
SecretKey string `json:"secretKey"`
|
||||
}
|
||||
|
||||
type Captcha struct { // 验证码配置
|
||||
KeyLong int `json:"keyLong"`
|
||||
ImgWidth int `json:"imgWidth"`
|
||||
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"`
|
||||
}
|
||||
|
||||
func init() {
|
||||
v := viper.New()
|
||||
v.SetConfigName("config") // 设置配置文件名 (不带后缀)
|
||||
v.AddConfigPath("/") // 第一个搜索路径
|
||||
v.SetConfigType("json")
|
||||
err := v.ReadInConfig() // 搜索路径,并读取配置数据
|
||||
if err != nil {
|
||||
panic(fmt.Errorf("Fatal error config file: %s \n", err))
|
||||
}
|
||||
v.WatchConfig()
|
||||
v.OnConfigChange(func(e fsnotify.Event) {
|
||||
fmt.Println("config file changed:", e.Name)
|
||||
if err := v.Unmarshal(&global.GVA_CONFIG); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
})
|
||||
if err := v.Unmarshal(&global.GVA_CONFIG); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
global.GVA_VP = v
|
||||
}
|
||||
@@ -1,12 +1,13 @@
|
||||
package init
|
||||
|
||||
import (
|
||||
"gin-vue-admin/global"
|
||||
"gin-vue-admin/model"
|
||||
"github.com/jinzhu/gorm"
|
||||
)
|
||||
|
||||
//注册数据库表专用
|
||||
func RegisterTable(db *gorm.DB) {
|
||||
func DBTables() {
|
||||
db := global.GVA_DB
|
||||
db.AutoMigrate(model.SysUser{},
|
||||
model.SysAuthority{},
|
||||
model.SysMenu{},
|
||||
@@ -20,5 +21,5 @@ func RegisterTable(db *gorm.DB) {
|
||||
model.ExaFileChunk{},
|
||||
model.ExaCustomer{},
|
||||
)
|
||||
L.Debug("register table success")
|
||||
global.GVA_LOG.Debug("register table success")
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
package init
|
||||
|
||||
// Custom Logger
|
||||
type Logger interface {
|
||||
Debug(v ...interface{})
|
||||
Info(v ...interface{})
|
||||
Warning(v ...interface{})
|
||||
Error(v ...interface{})
|
||||
Critical(v ...interface{})
|
||||
Fatal(v ...interface{})
|
||||
}
|
||||
|
||||
var L Logger
|
||||
|
||||
func SetLogger(logger Logger) {
|
||||
L = logger
|
||||
}
|
||||
@@ -7,9 +7,10 @@ import (
|
||||
)
|
||||
|
||||
//初始化数据库并产生数据库全局变量
|
||||
func RegisterMysql(admin MysqlAdmin) {
|
||||
func Mysql() {
|
||||
admin := global.GVA_CONFIG.MysqlAdmin
|
||||
if db, err := gorm.Open("mysql", admin.Username+":"+admin.Password+"@("+admin.Path+")/"+admin.Dbname+"?"+admin.Config); err != nil {
|
||||
L.Error("DEFAULTDB数据库启动异常", err)
|
||||
global.GVA_LOG.Error("DEFAULTDB数据库启动异常", err)
|
||||
} else {
|
||||
global.GVA_DB = db
|
||||
global.GVA_DB.DB().SetMaxIdleConns(admin.MaxIdleConns)
|
||||
|
||||
@@ -1,144 +0,0 @@
|
||||
package qmlog
|
||||
|
||||
// Register logger
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"gin-vue-admin/init"
|
||||
"gin-vue-admin/utils"
|
||||
rotatelogs "github.com/lestrrat/go-file-rotatelogs"
|
||||
oplogging "github.com/op/go-logging"
|
||||
"io"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
logDir = "log"
|
||||
logSoftLink = "api.log"
|
||||
module = "gin-vue-admin"
|
||||
)
|
||||
|
||||
var (
|
||||
configNotFound = errors.New("logger prefix not found")
|
||||
|
||||
defaultFormatter = `%{time:2006/01/02 - 15:04:05.000} %{longfile} %{color:bold}▶ [%{level:.6s}] %{message}%{color:reset}`
|
||||
)
|
||||
|
||||
type Logger struct {
|
||||
logger *oplogging.Logger
|
||||
}
|
||||
|
||||
func NewLogger() error {
|
||||
c := init.GinVueAdminconfig.Log
|
||||
if c.Prefix == "" {
|
||||
return configNotFound
|
||||
}
|
||||
logger := oplogging.MustGetLogger(module)
|
||||
var backends []oplogging.Backend
|
||||
backends = registerStdout(c, backends)
|
||||
backends = registerFile(c, backends)
|
||||
|
||||
oplogging.SetBackend(backends...)
|
||||
init.SetLogger(logger)
|
||||
return nil
|
||||
}
|
||||
|
||||
func registerStdout(c init.Log, backends []oplogging.Backend) []oplogging.Backend {
|
||||
for _, v := range c.Stdout {
|
||||
level, err := oplogging.LogLevel(v)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
continue
|
||||
}
|
||||
backends = append(backends, createBackend(os.Stdout, c, level))
|
||||
}
|
||||
|
||||
return backends
|
||||
}
|
||||
|
||||
func registerFile(c init.Log, backends []oplogging.Backend) []oplogging.Backend {
|
||||
if len(c.File) > 0 {
|
||||
if ok, _ := utils.PathExists(logDir); !ok {
|
||||
// directory not exist
|
||||
fmt.Println("create log directory")
|
||||
_ = os.Mkdir(logDir, os.ModePerm)
|
||||
}
|
||||
apiLogPath := logDir + string(os.PathSeparator) + logSoftLink
|
||||
fileWriter, err := rotatelogs.New(
|
||||
apiLogPath+".%Y-%m-%d-%H-%M.log",
|
||||
// generate soft link, point to latest log file
|
||||
rotatelogs.WithLinkName(apiLogPath),
|
||||
// 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)
|
||||
return backends
|
||||
}
|
||||
for _, v := range c.File {
|
||||
level, err := oplogging.LogLevel(v)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
continue
|
||||
}
|
||||
backends = append(backends, createBackend(fileWriter, c, level))
|
||||
}
|
||||
}
|
||||
|
||||
return backends
|
||||
}
|
||||
|
||||
func createBackend(w io.Writer, c init.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 init.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)
|
||||
}
|
||||
|
||||
func (l Logger) Debug(v ...interface{}) {
|
||||
l.logger.Debug(v)
|
||||
}
|
||||
|
||||
func (l Logger) Info(v ...interface{}) {
|
||||
l.logger.Info(v)
|
||||
}
|
||||
|
||||
func (l Logger) Warning(v ...interface{}) {
|
||||
l.logger.Warning(v)
|
||||
}
|
||||
|
||||
func (l Logger) Error(v ...interface{}) {
|
||||
l.logger.Error(v)
|
||||
}
|
||||
|
||||
func (l Logger) Critical(v ...interface{}) {
|
||||
l.logger.Critical(v)
|
||||
}
|
||||
|
||||
func (l Logger) Fatal(v ...interface{}) {
|
||||
l.logger.Fatal(v)
|
||||
}
|
||||
@@ -5,17 +5,18 @@ import (
|
||||
"github.com/go-redis/redis"
|
||||
)
|
||||
|
||||
func RegisterRedis() {
|
||||
func Redis() {
|
||||
redisCfg := global.GVA_CONFIG.RedisAdmin
|
||||
client := redis.NewClient(&redis.Options{
|
||||
Addr: GinVueAdminconfig.RedisAdmin.Addr,
|
||||
Password: GinVueAdminconfig.RedisAdmin.Password, // no password set
|
||||
DB: GinVueAdminconfig.RedisAdmin.DB, // use default DB
|
||||
Addr: redisCfg.Addr,
|
||||
Password: redisCfg.Password, // no password set
|
||||
DB: redisCfg.DB, // use default DB
|
||||
})
|
||||
pong, err := client.Ping().Result()
|
||||
if err != nil {
|
||||
L.Error(err)
|
||||
global.GVA_LOG.Error(err)
|
||||
} else {
|
||||
L.Info("redis connect ping response:", pong)
|
||||
global.GVA_LOG.Info("redis connect ping response:", pong)
|
||||
global.GVA_REDIS = client
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package init
|
||||
|
||||
import (
|
||||
_ "gin-vue-admin/docs"
|
||||
"gin-vue-admin/global"
|
||||
"gin-vue-admin/middleware"
|
||||
"gin-vue-admin/router"
|
||||
"github.com/gin-gonic/gin"
|
||||
@@ -10,18 +11,16 @@ import (
|
||||
)
|
||||
|
||||
//初始化总路由
|
||||
func RegisterRouter() *gin.Engine {
|
||||
func Routers() *gin.Engine {
|
||||
var Router = gin.Default()
|
||||
|
||||
//Router.Use(middleware.LoadTls()) // 打开就能玩https了
|
||||
// 如果不需要日志 请关闭这里
|
||||
Router.Use(middleware.Logger())
|
||||
L.Debug("use middleware logger")
|
||||
global.GVA_LOG.Debug("use middleware logger")
|
||||
// 跨域
|
||||
Router.Use(middleware.Cors())
|
||||
L.Debug("use middleware cors")
|
||||
global.GVA_LOG.Debug("use middleware cors")
|
||||
Router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
||||
L.Debug("register swagger handler")
|
||||
global.GVA_LOG.Debug("register swagger handler")
|
||||
// 方便统一添加路由组前缀 多服务器上线使用
|
||||
ApiGroup := Router.Group("")
|
||||
router.InitUserRouter(ApiGroup) // 注册用户路由
|
||||
|
||||
Reference in New Issue
Block a user