做完了一部分,备份一下,防止以外删除
This commit is contained in:
43
pkg/config/watcher.go
Normal file
43
pkg/config/watcher.go
Normal file
@@ -0,0 +1,43 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/fsnotify/fsnotify"
|
||||
"github.com/spf13/viper"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// Watch 监听配置文件变化
|
||||
// 运行直到上下文被取消
|
||||
func Watch(ctx context.Context, logger *zap.Logger) {
|
||||
viper.WatchConfig()
|
||||
viper.OnConfigChange(func(e fsnotify.Event) {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return // 如果上下文被取消则停止处理
|
||||
default:
|
||||
logger.Info("配置文件已更改", zap.String("file", e.Name))
|
||||
|
||||
// 尝试重新加载
|
||||
newConfig, err := Reload()
|
||||
if err != nil {
|
||||
logger.Error("重新加载配置失败,保留先前配置",
|
||||
zap.Error(err),
|
||||
zap.String("file", e.Name),
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
logger.Info("配置重新加载成功",
|
||||
zap.String("file", e.Name),
|
||||
zap.String("server_address", newConfig.Server.Address),
|
||||
zap.String("log_level", newConfig.Logging.Level),
|
||||
)
|
||||
}
|
||||
})
|
||||
|
||||
// 阻塞直到上下文被取消
|
||||
<-ctx.Done()
|
||||
logger.Info("配置监听器已停止")
|
||||
}
|
||||
Reference in New Issue
Block a user