game_sync/common/log.go

77 lines
1.5 KiB
Go

package common
import (
"os"
"path/filepath"
"github.com/howeyc/fsnotify"
"mongo.games.com/goserver/core"
"mongo.games.com/goserver/core/basic"
"mongo.games.com/goserver/core/logger"
)
func init() {
core.RegisteHook(core.HOOK_BEFORE_START, func() error {
var err error
workDir, err := os.Getwd()
if err != nil {
return err
}
watcher, err := fsnotify.NewWatcher()
if err != nil {
return err
}
// Process events
go func() {
defer func() {
if err := recover(); err != nil {
logger.Logger.Warn("watch logger.xml modify goroutine err:", err)
}
}()
for {
select {
case ev, ok := <-watcher.Event:
if ok && ev != nil {
if ev.IsModify() {
obj := core.CoreObject()
if filepath.Base(ev.Name) == "logger.xml" {
if obj != nil {
obj.SendCommand(&loggerParamModifiedCommand{fileName: ev.Name}, false)
}
}
}
} else {
return
}
case err := <-watcher.Error:
logger.Logger.Warn("fsnotify error:", err)
}
}
logger.Logger.Warn("logger.xml watcher quit!")
}()
watcher.Watch(workDir)
return nil
})
}
type loggerParamModifiedCommand struct {
fileName string
}
func (lmc *loggerParamModifiedCommand) Done(o *basic.Object) error {
logger.Logger.Info("reload logger.xml:", lmc.fileName)
data, err := os.ReadFile(lmc.fileName)
if err != nil {
return err
}
if len(data) != 0 {
err = logger.Reload(lmc.fileName)
if err != nil {
logger.Logger.Warnf("reload logger.xml %v err: %v", lmc.fileName, err)
}
}
return err
}