game_sync/common/log_mgr.go

133 lines
3.4 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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")
}