[] Refactor logger tag configuration
Some checks failed
/ DCO (pull_request) Failing after 36s
/ Builds (pull_request) Successful in 1m3s
/ OCI image (pull_request) Successful in 1m54s
/ Vulncheck (pull_request) Failing after 2m39s
/ Lint (pull_request) Successful in 5m10s
/ Tests (pull_request) Successful in 2m42s
/ Integration tests (pull_request) Failing after 2m47s

Signed-off-by: Pavel Pogodaev <p.pogodaev@yadro.com>
This commit is contained in:
Pavel Pogodaev 2025-04-16 17:53:49 +03:00
parent f0b86c8ba7
commit 1dcf1775de
3 changed files with 20 additions and 20 deletions

View file

@ -115,6 +115,7 @@ type (
tagsConfig struct { tagsConfig struct {
tagLogs sync.Map tagLogs sync.Map
defaultLvl zap.AtomicLevel
} }
logLevelConfig struct { logLevelConfig struct {
@ -170,23 +171,21 @@ func (t *tagsConfig) LevelEnabled(tag string, tgtLevel zapcore.Level) bool {
return lvl.(zapcore.Level).Enabled(tgtLevel) return lvl.(zapcore.Level).Enabled(tgtLevel)
} }
func (t *tagsConfig) DefaultEnabled(lvl zapcore.Level) bool {
return t.defaultLvl.Enabled(lvl)
}
func (t *tagsConfig) update(cfg *viper.Viper, ll zapcore.Level) error { func (t *tagsConfig) update(cfg *viper.Viper, ll zapcore.Level) error {
tags, err := fetchLogTagsConfig(cfg, ll) tags, err := fetchLogTagsConfig(cfg, ll)
if err != nil { if err != nil {
return err return err
} }
t.tagLogs.Range(func(key, value any) bool { t.tagLogs.Range(func(key, _ any) bool {
k := key.(string) k := key.(string)
v := value.(zapcore.Level)
if lvl, ok := tags[k]; ok { if _, ok := tags[k]; !ok {
if lvl != v {
t.tagLogs.Store(key, lvl)
}
} else {
t.tagLogs.Delete(key) t.tagLogs.Delete(key)
delete(tags, k)
} }
return true return true
}) })
@ -194,6 +193,7 @@ func (t *tagsConfig) update(cfg *viper.Viper, ll zapcore.Level) error {
for k, v := range tags { for k, v := range tags {
t.tagLogs.Store(k, v) t.tagLogs.Store(k, v)
} }
t.defaultLvl.SetLevel(ll)
return nil return nil
} }

View file

@ -41,6 +41,7 @@ type zapCoreTagFilterWrapper struct {
type TagFilterSettings interface { type TagFilterSettings interface {
LevelEnabled(tag string, lvl zapcore.Level) bool LevelEnabled(tag string, lvl zapcore.Level) bool
DefaultEnabled(lvl zapcore.Level) bool
} }
func (c *zapCoreTagFilterWrapper) Enabled(level zapcore.Level) bool { func (c *zapCoreTagFilterWrapper) Enabled(level zapcore.Level) bool {
@ -63,24 +64,26 @@ func (c *zapCoreTagFilterWrapper) Check(entry zapcore.Entry, checked *zapcore.Ch
} }
func (c *zapCoreTagFilterWrapper) Write(entry zapcore.Entry, fields []zapcore.Field) error { func (c *zapCoreTagFilterWrapper) Write(entry zapcore.Entry, fields []zapcore.Field) error {
if c.shouldSkip(entry, fields) || c.shouldSkip(entry, c.extra) { if c.shouldSkip(entry, fields, c.extra) {
return nil return nil
} }
return c.core.Write(entry, fields) return c.core.Write(entry, fields)
} }
func (c *zapCoreTagFilterWrapper) shouldSkip(entry zapcore.Entry, fields []zap.Field) bool { func (c *zapCoreTagFilterWrapper) shouldSkip(entry zapcore.Entry, fields []zap.Field, extra []zap.Field) bool {
for _, field := range fields { for _, field := range fields {
if field.Key == logs.TagFieldName && field.Type == zapcore.StringType { if field.Key == logs.TagFieldName && field.Type == zapcore.StringType {
if !c.settings.LevelEnabled(field.String, entry.Level) { return !c.settings.LevelEnabled(field.String, entry.Level)
return true
} }
break }
for _, field := range extra {
if field.Key == logs.TagFieldName && field.Type == zapcore.StringType {
return !c.settings.LevelEnabled(field.String, entry.Level)
} }
} }
return false return !c.settings.DefaultEnabled(entry.Level)
} }
func (c *zapCoreTagFilterWrapper) Sync() error { func (c *zapCoreTagFilterWrapper) Sync() error {
@ -127,14 +130,13 @@ func newLogEncoder() zapcore.Encoder {
// //
// See also zapcore.Level, zap.NewProductionConfig, zap.AddStacktrace. // See also zapcore.Level, zap.NewProductionConfig, zap.AddStacktrace.
func newStdoutLogger(v *viper.Viper, lvl zap.AtomicLevel, loggerSettings LoggerAppSettings, tagSetting TagFilterSettings) *Logger { func newStdoutLogger(v *viper.Viper, lvl zap.AtomicLevel, loggerSettings LoggerAppSettings, tagSetting TagFilterSettings) *Logger {
stdout := zapcore.AddSync(os.Stderr) stdout := zapcore.AddSync(os.Stdout)
consoleOutCore := zapcore.NewCore(newLogEncoder(), stdout, lvl) consoleOutCore := zapcore.NewCore(newLogEncoder(), stdout, lvl)
consoleOutCore = applyZapCoreMiddlewares(consoleOutCore, v, loggerSettings, tagSetting) consoleOutCore = applyZapCoreMiddlewares(consoleOutCore, v, loggerSettings, tagSetting)
return &Logger{ return &Logger{
logger: zap.New(consoleOutCore, zap.AddStacktrace(zap.NewAtomicLevelAt(zap.FatalLevel))), logger: zap.New(consoleOutCore, zap.AddStacktrace(zap.NewAtomicLevelAt(zap.FatalLevel))),
lvl: lvl,
} }
} }
@ -152,7 +154,6 @@ func newJournaldLogger(v *viper.Viper, lvl zap.AtomicLevel, loggerSettings Logge
return &Logger{ return &Logger{
logger: zap.New(coreWithContext, zap.AddStacktrace(zap.NewAtomicLevelAt(zap.FatalLevel))), logger: zap.New(coreWithContext, zap.AddStacktrace(zap.NewAtomicLevelAt(zap.FatalLevel))),
lvl: lvl,
} }
} }

View file

@ -208,7 +208,6 @@ var defaultTags = []string{logs.TagApp, logs.TagDatapath, logs.TagExternalStorag
type Logger struct { type Logger struct {
logger *zap.Logger logger *zap.Logger
lvl zap.AtomicLevel
} }
type appCfg struct { type appCfg struct {