From 1dcf1775de35c7aa6f7b18181d0f475a360e65c1 Mon Sep 17 00:00:00 2001
From: Pavel Pogodaev
Date: Wed, 16 Apr 2025 17:53:49 +0300
Subject: [PATCH] [] Refactor logger tag configuration
Signed-off-by: Pavel Pogodaev
---
cmd/http-gw/app.go | 18 +++++++++---------
cmd/http-gw/logger.go | 21 +++++++++++----------
cmd/http-gw/settings.go | 1 -
3 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/cmd/http-gw/app.go b/cmd/http-gw/app.go
index de186fb..72a007f 100644
--- a/cmd/http-gw/app.go
+++ b/cmd/http-gw/app.go
@@ -114,7 +114,8 @@ type (
}
tagsConfig struct {
- tagLogs sync.Map
+ tagLogs sync.Map
+ defaultLvl zap.AtomicLevel
}
logLevelConfig struct {
@@ -170,23 +171,21 @@ func (t *tagsConfig) LevelEnabled(tag string, tgtLevel zapcore.Level) bool {
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 {
tags, err := fetchLogTagsConfig(cfg, ll)
if err != nil {
return err
}
- t.tagLogs.Range(func(key, value any) bool {
+ t.tagLogs.Range(func(key, _ any) bool {
k := key.(string)
- v := value.(zapcore.Level)
- if lvl, ok := tags[k]; ok {
- if lvl != v {
- t.tagLogs.Store(key, lvl)
- }
- } else {
+ if _, ok := tags[k]; !ok {
t.tagLogs.Delete(key)
- delete(tags, k)
}
return true
})
@@ -194,6 +193,7 @@ func (t *tagsConfig) update(cfg *viper.Viper, ll zapcore.Level) error {
for k, v := range tags {
t.tagLogs.Store(k, v)
}
+ t.defaultLvl.SetLevel(ll)
return nil
}
diff --git a/cmd/http-gw/logger.go b/cmd/http-gw/logger.go
index 91105f7..196cff3 100644
--- a/cmd/http-gw/logger.go
+++ b/cmd/http-gw/logger.go
@@ -41,6 +41,7 @@ type zapCoreTagFilterWrapper struct {
type TagFilterSettings interface {
LevelEnabled(tag string, lvl zapcore.Level) bool
+ DefaultEnabled(lvl 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 {
- if c.shouldSkip(entry, fields) || c.shouldSkip(entry, c.extra) {
+ if c.shouldSkip(entry, fields, c.extra) {
return nil
}
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 {
if field.Key == logs.TagFieldName && field.Type == zapcore.StringType {
- if !c.settings.LevelEnabled(field.String, entry.Level) {
- return true
- }
- break
+ return !c.settings.LevelEnabled(field.String, entry.Level)
+ }
+ }
+ 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 {
@@ -127,14 +130,13 @@ func newLogEncoder() zapcore.Encoder {
//
// See also zapcore.Level, zap.NewProductionConfig, zap.AddStacktrace.
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 = applyZapCoreMiddlewares(consoleOutCore, v, loggerSettings, tagSetting)
return &Logger{
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{
logger: zap.New(coreWithContext, zap.AddStacktrace(zap.NewAtomicLevelAt(zap.FatalLevel))),
- lvl: lvl,
}
}
diff --git a/cmd/http-gw/settings.go b/cmd/http-gw/settings.go
index 132c627..7910a73 100644
--- a/cmd/http-gw/settings.go
+++ b/cmd/http-gw/settings.go
@@ -208,7 +208,6 @@ var defaultTags = []string{logs.TagApp, logs.TagDatapath, logs.TagExternalStorag
type Logger struct {
logger *zap.Logger
- lvl zap.AtomicLevel
}
type appCfg struct {