Skip to content

Commit da06522

Browse files
dveedendjshow832
andauthored
logger, config: setup logging after reading the config file (#856)
Co-authored-by: djshow832 <[email protected]>
1 parent 261b13d commit da06522

File tree

8 files changed

+37
-37
lines changed

8 files changed

+37
-37
lines changed

pkg/manager/config/config.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"github.com/BurntSushi/toml"
1212
"github.com/pingcap/tiproxy/lib/config"
1313
"github.com/pingcap/tiproxy/lib/util/errors"
14-
"go.uber.org/zap"
1514
)
1615

1716
func (e *ConfigManager) reloadConfigFile(file string) error {
@@ -68,7 +67,6 @@ func (e *ConfigManager) SetTOMLConfig(data []byte) (err error) {
6867
if originalData == nil || !bytes.Equal(originalData, newData) {
6968
e.sts.checksum = crc32.ChecksumIEEE(newData)
7069
e.sts.data = newData
71-
e.logger.Info("current config", zap.Any("cfg", e.sts.current))
7270
for _, list := range e.sts.listeners {
7371
list <- base.Clone()
7472
}

pkg/manager/config/config_test.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"fmt"
88
"os"
99
"path/filepath"
10-
"strings"
1110
"testing"
1211
"time"
1312

@@ -299,19 +298,19 @@ func TestFilePath(t *testing.T) {
299298
}
300299

301300
func TestChecksum(t *testing.T) {
302-
cfgmgr, text, _ := testConfigManager(t, "", "")
303-
require.Equal(t, 1, strings.Count(text.String(), "current config"))
301+
cfgmgr, _, _ := testConfigManager(t, "", "")
302+
304303
c1 := cfgmgr.GetConfigChecksum()
305304
require.NoError(t, cfgmgr.SetTOMLConfig([]byte(`proxy.addr = "gg"`)))
306-
require.Equal(t, 2, strings.Count(text.String(), "current config"))
307305
// same config, shouldn't log it again
308306
require.NoError(t, cfgmgr.SetTOMLConfig([]byte(`proxy.addr = "gg"`)))
309-
require.Equal(t, 2, strings.Count(text.String(), "current config"))
307+
310308
c2 := cfgmgr.GetConfigChecksum()
311309
require.NoError(t, cfgmgr.SetTOMLConfig([]byte(`proxy.addr = "vv"`)))
310+
312311
c3 := cfgmgr.GetConfigChecksum()
313312
require.NoError(t, cfgmgr.SetTOMLConfig([]byte(`proxy.addr="gg"`)))
314-
require.Equal(t, 4, strings.Count(text.String(), "current config"))
313+
315314
c4 := cfgmgr.GetConfigChecksum()
316315
require.Equal(t, c2, c4)
317316
require.NotEqual(t, c1, c2)

pkg/manager/config/manager.go

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@ package config
55

66
import (
77
"context"
8+
"fmt"
9+
"os"
810
"sync"
911
"time"
1012

1113
"github.com/pingcap/tiproxy/lib/config"
1214
"github.com/pingcap/tiproxy/lib/util/errors"
1315
"github.com/pingcap/tiproxy/pkg/util/waitgroup"
1416
"github.com/tidwall/btree"
15-
"go.uber.org/zap"
1617
)
1718

1819
const (
@@ -24,9 +25,7 @@ const (
2425
checkFileInterval = 2 * time.Second
2526
)
2627

27-
var (
28-
ErrNoResults = errors.Errorf("has no results")
29-
)
28+
var ErrNoResults = errors.Errorf("has no results")
3029

3130
type KVValue struct {
3231
Key string
@@ -36,7 +35,6 @@ type KVValue struct {
3635
type ConfigManager struct {
3736
wg waitgroup.WaitGroup
3837
cancel context.CancelFunc
39-
logger *zap.Logger
4038
advertiseAddr string
4139

4240
kv *btree.BTreeG[KVValue]
@@ -58,11 +56,10 @@ func NewConfigManager() *ConfigManager {
5856
}
5957
}
6058

61-
func (e *ConfigManager) Init(ctx context.Context, logger *zap.Logger, configFile string, advertiseAddr string) error {
59+
func (e *ConfigManager) Init(ctx context.Context, configFile string, advertiseAddr string) error {
6260
var nctx context.Context
6361
nctx, e.cancel = context.WithCancel(ctx)
6462

65-
e.logger = logger
6663
e.advertiseAddr = advertiseAddr
6764

6865
// for namespace persistence
@@ -89,11 +86,11 @@ func (e *ConfigManager) Init(ctx context.Context, logger *zap.Logger, configFile
8986
return
9087
case <-ticker.C:
9188
if err := e.reloadConfigFile(configFile); err != nil {
92-
e.logger.Warn("failed to reload file", zap.String("file", configFile), zap.Error(err))
89+
fmt.Fprintf(os.Stderr, "failed to reload file %s: %v", configFile, err)
9390
}
9491
}
9592
}
96-
}, nil, e.logger)
93+
}, nil, nil)
9794
} else {
9895
if err := e.SetTOMLConfig(nil); err != nil {
9996
return err

pkg/manager/config/manager_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
)
1515

1616
func testConfigManager(t *testing.T, configFile string, advertiseAddr string) (*ConfigManager, fmt.Stringer, context.Context) {
17-
logger, text := logger.CreateLoggerForTest(t)
17+
_, text := logger.CreateLoggerForTest(t)
1818

1919
ctx, cancel := context.WithCancel(context.Background())
2020
if ddl, ok := t.Deadline(); ok {
@@ -23,7 +23,7 @@ func testConfigManager(t *testing.T, configFile string, advertiseAddr string) (*
2323

2424
cfgmgr := NewConfigManager()
2525
cfgmgr.checkFileInterval = 20 * time.Millisecond
26-
require.NoError(t, cfgmgr.Init(ctx, logger, configFile, advertiseAddr))
26+
require.NoError(t, cfgmgr.Init(ctx, configFile, advertiseAddr))
2727

2828
t.Cleanup(func() {
2929
require.NoError(t, cfgmgr.Close())

pkg/manager/logger/manager.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ func (lm *LoggerManager) watchCfg(ctx context.Context, cfgch <-chan *config.Conf
7777
zap.NamedError("cfg marshal error", merr),
7878
)
7979
}
80+
lm.logger.Info("current config", zap.Any("cfg", acfg))
8081
}
8182
}
8283
}

pkg/manager/logger/manager_test.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,15 @@ func TestUpdateCfg(t *testing.T) {
6060
},
6161
{
6262
updateCfg: func(cfg *config.LogOnline) {
63+
// Filter the logs in LoggerManager.watchCfg().
64+
cfg.Level = "warn"
6365
cfg.LogFile.MaxSize = 3
6466
cfg.LogFile.MaxBackups = 5
6567
},
6668
action: func(log *zap.Logger) {
6769
for range 5 {
6870
msg := strings.Repeat("a", 500*1024)
69-
log.Info(msg)
71+
log.Warn(msg)
7072
}
7173
},
7274
check: func(files []os.FileInfo) bool {
@@ -103,10 +105,15 @@ func TestUpdateCfg(t *testing.T) {
103105
},
104106
}
105107

106-
lg, ch := setupLogManager(t, cfg)
107-
// Make sure the latest config also applies to cloned loggers.
108-
lg = lg.Named("another").With(zap.String("field", "test_field"))
109108
for i, test := range tests {
109+
require.NoError(t, os.RemoveAll(dir))
110+
111+
lm, lg, err := NewLoggerManager(&cfg.Log)
112+
require.NoError(t, err)
113+
ch := make(chan *config.Config)
114+
lm.Init(ch)
115+
// Make sure the latest config also applies to cloned loggers.
116+
lg = lg.Named("another").With(zap.String("field", "test_field"))
110117
require.NoError(t, lg.Sync())
111118

112119
clonedCfg := cfg.Clone()
@@ -117,10 +124,6 @@ func TestUpdateCfg(t *testing.T) {
117124
// this ensured all old data are flushed by closing the older file logger
118125
ch <- clonedCfg
119126

120-
// delete old data after flushed
121-
err := os.RemoveAll(dir)
122-
require.NoError(t, err)
123-
124127
// write new data
125128
test.action(lg)
126129

@@ -148,6 +151,7 @@ func TestUpdateCfg(t *testing.T) {
148151
}
149152
}
150153
timer.Stop()
154+
require.NoError(t, lm.Close())
151155
}
152156
}
153157

pkg/server/api/server_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func createServer(t *testing.T) (*Server, doHTTPFunc) {
3131
lg, _ := logger.CreateLoggerForTest(t)
3232
ready := atomic.NewBool(true)
3333
cfgmgr := mgrcfg.NewConfigManager()
34-
require.NoError(t, cfgmgr.Init(context.Background(), lg, "", ""))
34+
require.NoError(t, cfgmgr.Init(context.Background(), "", ""))
3535
crtmgr := mgrcrt.NewCertManager()
3636
require.NoError(t, crtmgr.Init(cfgmgr.GetConfig(), lg, cfgmgr.WatchConfig()))
3737
nsMgr := newMockNamespaceManager()

pkg/server/server.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -70,18 +70,18 @@ func NewServer(ctx context.Context, sctx *sctx.Context) (srv *Server, err error)
7070
handler := sctx.Handler
7171
ready := atomic.NewBool(false)
7272

73-
// set up logger
74-
var lg *zap.Logger
75-
if srv.loggerManager, lg, err = logger.NewLoggerManager(nil); err != nil {
73+
// setup config manager
74+
if err = srv.configManager.Init(ctx, sctx.ConfigFile, sctx.AdvertiseAddr); err != nil {
7675
return
7776
}
78-
srv.loggerManager.Init(srv.configManager.WatchConfig())
77+
cfg := srv.configManager.GetConfig()
7978

80-
// setup config manager
81-
if err = srv.configManager.Init(ctx, lg.Named("config"), sctx.ConfigFile, sctx.AdvertiseAddr); err != nil {
79+
// set up logger
80+
var lg *zap.Logger
81+
if srv.loggerManager, lg, err = logger.NewLoggerManager(&cfg.Log); err != nil {
8282
return
8383
}
84-
cfg := srv.configManager.GetConfig()
84+
srv.loggerManager.Init(srv.configManager.WatchConfig())
8585

8686
// welcome messages must be printed after initialization of configmager, because
8787
// logfile backended zaplogger is enabled after cfgmgr.Init(..).
@@ -92,7 +92,7 @@ func NewServer(ctx context.Context, sctx *sctx.Context) (srv *Server, err error)
9292
// Make sure the TiProxy info is always printed.
9393
level := lg.Level()
9494
srv.loggerManager.SetLoggerLevel(zap.InfoLevel)
95-
printInfo(lg)
95+
printInfo(lg, cfg)
9696
srv.loggerManager.SetLoggerLevel(level)
9797

9898
// setup metrics
@@ -224,7 +224,7 @@ func NewServer(ctx context.Context, sctx *sctx.Context) (srv *Server, err error)
224224
return
225225
}
226226

227-
func printInfo(lg *zap.Logger) {
227+
func printInfo(lg *zap.Logger, cfg *config.Config) {
228228
fields := []zap.Field{
229229
zap.String("Release Version", versioninfo.TiProxyVersion),
230230
zap.String("Git Commit Hash", versioninfo.TiProxyGitHash),
@@ -235,6 +235,7 @@ func printInfo(lg *zap.Logger) {
235235
zap.String("Arch", runtime.GOARCH),
236236
}
237237
lg.Info("Welcome to TiProxy.", fields...)
238+
lg.Info("current config", zap.Any("cfg", cfg))
238239
}
239240

240241
func (s *Server) preClose() {

0 commit comments

Comments
 (0)