Refine some structs and handle cycle import
This commit is contained in:
30
server/core/config.go
Normal file
30
server/core/config.go
Normal file
@@ -0,0 +1,30 @@
|
||||
package core
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"gin-vue-admin/global"
|
||||
"github.com/fsnotify/fsnotify"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
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
|
||||
}
|
108
server/core/log.go
Normal file
108
server/core/log.go
Normal file
@@ -0,0 +1,108 @@
|
||||
package core
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"gin-vue-admin/config"
|
||||
"gin-vue-admin/global"
|
||||
"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 (
|
||||
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
|
||||
backends = registerStdout(c, backends)
|
||||
backends = registerFile(c, backends)
|
||||
|
||||
oplogging.SetBackend(backends...)
|
||||
global.GVA_LOG = logger
|
||||
}
|
||||
|
||||
func registerStdout(c config.Log, backends []oplogging.Backend) []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))
|
||||
}
|
||||
|
||||
return backends
|
||||
}
|
||||
|
||||
func registerFile(c config.Log, backends []oplogging.Backend) []oplogging.Backend {
|
||||
if c.File != "" {
|
||||
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
|
||||
}
|
||||
level, err := oplogging.LogLevel(c.File)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
backends = append(backends, createBackend(fileWriter, c, level))
|
||||
}
|
||||
|
||||
return backends
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
@@ -11,9 +11,9 @@ import (
|
||||
func RunWindowsServer() {
|
||||
if global.GVA_CONFIG.System.UseMultipoint {
|
||||
// 初始化redis服务
|
||||
init.RegisterRedis()
|
||||
init.Redis()
|
||||
}
|
||||
Router := init.RegisterRouter()
|
||||
Router := init.Routers()
|
||||
Router.Static("/form-generator", "./resource/page")
|
||||
address := fmt.Sprintf(":%d", global.GVA_CONFIG.System.Addr)
|
||||
s := &http.Server{
|
||||
@@ -24,11 +24,11 @@ func RunWindowsServer() {
|
||||
MaxHeaderBytes: 1 << 20,
|
||||
}
|
||||
time.Sleep(10 * time.Microsecond)
|
||||
init.L.Debug("server run success on ", address)
|
||||
global.GVA_LOG.Debug("server run success on ", address)
|
||||
|
||||
fmt.Printf(`欢迎使用 Gin-Vue-Admin
|
||||
默认自动化文档地址:http://127.0.0.1%s/swagger/index.html
|
||||
默认前端文件运行地址:http://127.0.0.1:8080
|
||||
`, s.Addr)
|
||||
init.L.Error(s.ListenAndServe())
|
||||
global.GVA_LOG.Error(s.ListenAndServe())
|
||||
}
|
||||
|
Reference in New Issue
Block a user