diff --git a/pkg/manager/config/config.go b/pkg/manager/config/config.go index d1d556f8..87a8d079 100644 --- a/pkg/manager/config/config.go +++ b/pkg/manager/config/config.go @@ -11,7 +11,6 @@ import ( "github.com/BurntSushi/toml" "github.com/pingcap/tiproxy/lib/config" "github.com/pingcap/tiproxy/lib/util/errors" - "go.uber.org/zap" ) func (e *ConfigManager) reloadConfigFile(file string) error { @@ -68,7 +67,6 @@ func (e *ConfigManager) SetTOMLConfig(data []byte) (err error) { if originalData == nil || !bytes.Equal(originalData, newData) { e.sts.checksum = crc32.ChecksumIEEE(newData) e.sts.data = newData - e.logger.Info("current config", zap.Any("cfg", e.sts.current)) for _, list := range e.sts.listeners { list <- base.Clone() } diff --git a/pkg/manager/config/config_test.go b/pkg/manager/config/config_test.go index 000c8883..2ea3557e 100644 --- a/pkg/manager/config/config_test.go +++ b/pkg/manager/config/config_test.go @@ -7,7 +7,6 @@ import ( "fmt" "os" "path/filepath" - "strings" "testing" "time" @@ -299,19 +298,19 @@ func TestFilePath(t *testing.T) { } func TestChecksum(t *testing.T) { - cfgmgr, text, _ := testConfigManager(t, "", "") - require.Equal(t, 1, strings.Count(text.String(), "current config")) + cfgmgr, _, _ := testConfigManager(t, "", "") + c1 := cfgmgr.GetConfigChecksum() require.NoError(t, cfgmgr.SetTOMLConfig([]byte(`proxy.addr = "gg"`))) - require.Equal(t, 2, strings.Count(text.String(), "current config")) // same config, shouldn't log it again require.NoError(t, cfgmgr.SetTOMLConfig([]byte(`proxy.addr = "gg"`))) - require.Equal(t, 2, strings.Count(text.String(), "current config")) + c2 := cfgmgr.GetConfigChecksum() require.NoError(t, cfgmgr.SetTOMLConfig([]byte(`proxy.addr = "vv"`))) + c3 := cfgmgr.GetConfigChecksum() require.NoError(t, cfgmgr.SetTOMLConfig([]byte(`proxy.addr="gg"`))) - require.Equal(t, 4, strings.Count(text.String(), "current config")) + c4 := cfgmgr.GetConfigChecksum() require.Equal(t, c2, c4) require.NotEqual(t, c1, c2) diff --git a/pkg/manager/config/manager.go b/pkg/manager/config/manager.go index 73182066..1536dcea 100644 --- a/pkg/manager/config/manager.go +++ b/pkg/manager/config/manager.go @@ -5,6 +5,8 @@ package config import ( "context" + "fmt" + "os" "sync" "time" @@ -12,7 +14,6 @@ import ( "github.com/pingcap/tiproxy/lib/util/errors" "github.com/pingcap/tiproxy/pkg/util/waitgroup" "github.com/tidwall/btree" - "go.uber.org/zap" ) const ( @@ -24,9 +25,7 @@ const ( checkFileInterval = 2 * time.Second ) -var ( - ErrNoResults = errors.Errorf("has no results") -) +var ErrNoResults = errors.Errorf("has no results") type KVValue struct { Key string @@ -36,7 +35,6 @@ type KVValue struct { type ConfigManager struct { wg waitgroup.WaitGroup cancel context.CancelFunc - logger *zap.Logger advertiseAddr string kv *btree.BTreeG[KVValue] @@ -58,11 +56,10 @@ func NewConfigManager() *ConfigManager { } } -func (e *ConfigManager) Init(ctx context.Context, logger *zap.Logger, configFile string, advertiseAddr string) error { +func (e *ConfigManager) Init(ctx context.Context, configFile string, advertiseAddr string) error { var nctx context.Context nctx, e.cancel = context.WithCancel(ctx) - e.logger = logger e.advertiseAddr = advertiseAddr // for namespace persistence @@ -89,11 +86,11 @@ func (e *ConfigManager) Init(ctx context.Context, logger *zap.Logger, configFile return case <-ticker.C: if err := e.reloadConfigFile(configFile); err != nil { - e.logger.Warn("failed to reload file", zap.String("file", configFile), zap.Error(err)) + fmt.Fprintf(os.Stderr, "failed to reload file %s: %v", configFile, err) } } } - }, nil, e.logger) + }, nil, nil) } else { if err := e.SetTOMLConfig(nil); err != nil { return err diff --git a/pkg/manager/config/manager_test.go b/pkg/manager/config/manager_test.go index 90935821..427c2d76 100644 --- a/pkg/manager/config/manager_test.go +++ b/pkg/manager/config/manager_test.go @@ -14,7 +14,7 @@ import ( ) func testConfigManager(t *testing.T, configFile string, advertiseAddr string) (*ConfigManager, fmt.Stringer, context.Context) { - logger, text := logger.CreateLoggerForTest(t) + _, text := logger.CreateLoggerForTest(t) ctx, cancel := context.WithCancel(context.Background()) if ddl, ok := t.Deadline(); ok { @@ -23,7 +23,7 @@ func testConfigManager(t *testing.T, configFile string, advertiseAddr string) (* cfgmgr := NewConfigManager() cfgmgr.checkFileInterval = 20 * time.Millisecond - require.NoError(t, cfgmgr.Init(ctx, logger, configFile, advertiseAddr)) + require.NoError(t, cfgmgr.Init(ctx, configFile, advertiseAddr)) t.Cleanup(func() { require.NoError(t, cfgmgr.Close()) diff --git a/pkg/manager/logger/manager.go b/pkg/manager/logger/manager.go index 631d9e6d..97f200c0 100644 --- a/pkg/manager/logger/manager.go +++ b/pkg/manager/logger/manager.go @@ -77,6 +77,7 @@ func (lm *LoggerManager) watchCfg(ctx context.Context, cfgch <-chan *config.Conf zap.NamedError("cfg marshal error", merr), ) } + lm.logger.Info("current config", zap.Any("cfg", acfg)) } } } diff --git a/pkg/server/api/server_test.go b/pkg/server/api/server_test.go index 2ac9617b..ad87675b 100644 --- a/pkg/server/api/server_test.go +++ b/pkg/server/api/server_test.go @@ -31,7 +31,7 @@ func createServer(t *testing.T) (*Server, doHTTPFunc) { lg, _ := logger.CreateLoggerForTest(t) ready := atomic.NewBool(true) cfgmgr := mgrcfg.NewConfigManager() - require.NoError(t, cfgmgr.Init(context.Background(), lg, "", "")) + require.NoError(t, cfgmgr.Init(context.Background(), "", "")) crtmgr := mgrcrt.NewCertManager() require.NoError(t, crtmgr.Init(cfgmgr.GetConfig(), lg, cfgmgr.WatchConfig())) nsMgr := newMockNamespaceManager() diff --git a/pkg/server/server.go b/pkg/server/server.go index a7db038f..feada9a3 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -68,18 +68,18 @@ func NewServer(ctx context.Context, sctx *sctx.Context) (srv *Server, err error) handler := sctx.Handler ready := atomic.NewBool(false) - // set up logger - var lg *zap.Logger - if srv.loggerManager, lg, err = logger.NewLoggerManager(nil); err != nil { + // setup config manager + if err = srv.configManager.Init(ctx, sctx.ConfigFile, sctx.AdvertiseAddr); err != nil { return } - srv.loggerManager.Init(srv.configManager.WatchConfig()) + cfg := srv.configManager.GetConfig() - // setup config manager - if err = srv.configManager.Init(ctx, lg.Named("config"), sctx.ConfigFile, sctx.AdvertiseAddr); err != nil { + // set up logger + var lg *zap.Logger + if srv.loggerManager, lg, err = logger.NewLoggerManager(&cfg.Log); err != nil { return } - cfg := srv.configManager.GetConfig() + srv.loggerManager.Init(srv.configManager.WatchConfig()) // welcome messages must be printed after initialization of configmager, because // logfile backended zaplogger is enabled after cfgmgr.Init(..). @@ -90,7 +90,7 @@ func NewServer(ctx context.Context, sctx *sctx.Context) (srv *Server, err error) // Make sure the TiProxy info is always printed. level := lg.Level() srv.loggerManager.SetLoggerLevel(zap.InfoLevel) - printInfo(lg) + printInfo(lg, cfg) srv.loggerManager.SetLoggerLevel(level) // setup metrics @@ -219,7 +219,7 @@ func NewServer(ctx context.Context, sctx *sctx.Context) (srv *Server, err error) return } -func printInfo(lg *zap.Logger) { +func printInfo(lg *zap.Logger, cfg *config.Config) { fields := []zap.Field{ zap.String("Release Version", versioninfo.TiProxyVersion), zap.String("Git Commit Hash", versioninfo.TiProxyGitHash), @@ -230,6 +230,7 @@ func printInfo(lg *zap.Logger) { zap.String("Arch", runtime.GOARCH), } lg.Info("Welcome to TiProxy.", fields...) + lg.Info("current config", zap.Any("cfg", cfg)) } func (s *Server) preClose() {