133 lines
3.4 KiB
Go
133 lines
3.4 KiB
Go
package common
|
||
|
||
/////////////////////////////////////////////////////////////
|
||
//使用方法
|
||
//1、定义自己日志模块名字
|
||
//const(
|
||
// BaccaratLogger = "BaccaratLogger"
|
||
// )
|
||
//2、通过自己定义的日志名获得日志实例,调用方式参考如下:
|
||
//-------getLoggerInstanceByName(BaccaratLogger).Trace(time.Now().String())
|
||
//-------getLoggerInstanceByName(BaccaratLogger).Warn(time.Now().String())
|
||
//-------getLoggerInstanceByName(BaccaratLogger).Error(time.Now().String())
|
||
//-------getLoggerInstanceByName(BaccaratLogger).Debug(time.Now().String())
|
||
//-------getLoggerInstanceByName(BaccaratLogger).Info(time.Now().String())
|
||
//-------getLoggerInstanceByName(BaccaratLogger).Flush()
|
||
//3、如果自己定义的日志名在配置文件中没有找到,则使用默认的全局日志
|
||
//4、可动态添加自己的日志配置,添加后即可生效
|
||
//5、注意确保自己定义的日志模块名与配置日志的文件名一样
|
||
//6、同时确保自己配置日志的文件中输出日志的文件名,参考如下:
|
||
// ..........
|
||
// .......... ↓↓↓这个日志输出的文件名
|
||
// <rollingfile formatid="all" type="size" filename="./all.log"
|
||
// ..........
|
||
// ..........
|
||
//////////////////////////////////////////////////////////////
|
||
|
||
import (
|
||
"github.com/cihub/seelog"
|
||
"github.com/howeyc/fsnotify"
|
||
"mongo.games.com/goserver/core/logger"
|
||
"mongo.games.com/goserver/core/utils"
|
||
"os"
|
||
"path"
|
||
"strings"
|
||
"sync"
|
||
)
|
||
|
||
var g_LogSet sync.Map
|
||
|
||
// 获得日志实例
|
||
func GetLoggerInstanceByName(name string) (log seelog.LoggerInterface) {
|
||
if v, ok := g_LogSet.Load(name); ok {
|
||
return v.(seelog.LoggerInterface)
|
||
}
|
||
return logger.Logger
|
||
}
|
||
func init() {
|
||
go utils.CatchPanic(watchFile)
|
||
}
|
||
func watchFile() {
|
||
watch, err := fsnotify.NewWatcher()
|
||
if err != nil {
|
||
logger.Error(err)
|
||
return
|
||
}
|
||
defer watch.Close()
|
||
var workingDir string
|
||
workDir, workingDirError := os.Getwd()
|
||
if workingDirError != nil {
|
||
workingDir = string(os.PathSeparator)
|
||
logger.Error(workingDirError)
|
||
return
|
||
}
|
||
workingDir = workDir + string(os.PathSeparator)
|
||
err = watch.Watch(workingDir)
|
||
if err != nil {
|
||
logger.Error(err)
|
||
return
|
||
}
|
||
|
||
dir_list, e := os.ReadDir(workingDir)
|
||
if e != nil {
|
||
logger.Error("read dir error")
|
||
return
|
||
}
|
||
for _, v := range dir_list {
|
||
if strings.Contains(v.Name(), ".xml") && v.Name() != "logger.xml" {
|
||
log, err := seelog.LoggerFromConfigAsFile(v.Name())
|
||
if err != nil {
|
||
logger.Error(err)
|
||
break
|
||
}
|
||
g_LogSet.Store(strings.TrimRight(v.Name(), ".xml"), log)
|
||
}
|
||
}
|
||
for {
|
||
select {
|
||
case ev := <-watch.Event:
|
||
if path.Ext(ev.Name) != ".xml" {
|
||
break
|
||
}
|
||
fileName := getFileName(ev.Name)
|
||
//logger.log过滤掉
|
||
if fileName == "logger" {
|
||
break
|
||
}
|
||
{
|
||
if ev.IsCreate() {
|
||
log, err := seelog.LoggerFromConfigAsFile(ev.Name)
|
||
if err != nil {
|
||
logger.Error(err)
|
||
break
|
||
}
|
||
g_LogSet.Store(fileName, log)
|
||
}
|
||
if ev.IsModify() {
|
||
log, err := seelog.LoggerFromConfigAsFile(ev.Name)
|
||
if err != nil {
|
||
logger.Error(err)
|
||
break
|
||
}
|
||
g_LogSet.Store(fileName, log)
|
||
}
|
||
if ev.IsDelete() {
|
||
g_LogSet.Delete(fileName)
|
||
}
|
||
if ev.IsRename() {
|
||
g_LogSet.Delete(fileName)
|
||
}
|
||
}
|
||
case err := <-watch.Error:
|
||
{
|
||
logger.Error("error : ", err)
|
||
return
|
||
}
|
||
}
|
||
}
|
||
}
|
||
func getFileName(fullPath string) string {
|
||
p := path.Base(strings.Replace(fullPath, "\\", "/", -1))
|
||
return strings.TrimSuffix(p, ".xml")
|
||
}
|