77 lines
1.5 KiB
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
|
|
}
|