diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2025b6d..85798b8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@ This document outlines major changes between releases.
 ### Added
 - Add handling quota limit reached error (#187)
 - Add slash clipping for FileName attribute (#174)
+- Add new format of tag names config
 
 ## [0.32.3] - 2025-02-05
 
diff --git a/cmd/http-gw/app.go b/cmd/http-gw/app.go
index de186fb..77d2818 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 {
@@ -139,26 +140,41 @@ func newTagsConfig(v *viper.Viper, ll zapcore.Level) *tagsConfig {
 		// panic here is analogue of the similar panic during common log level initialization.
 		panic(err.Error())
 	}
+	t.defaultLvl = zap.NewAtomicLevelAt(ll)
 	return &t
 }
 
 func newLogLevelConfig(lvl zap.AtomicLevel, tagsConfig *tagsConfig) *logLevelConfig {
 	return &logLevelConfig{
-		logLevel:   lvl,
+		logLevel:   minLogLevel(lvl, tagsConfig),
 		tagsConfig: tagsConfig,
 	}
 }
 
+func minLogLevel(lvl zap.AtomicLevel, config *tagsConfig) zap.AtomicLevel {
+	minLvl := lvl
+	config.tagLogs.Range(func(_, value any) bool {
+		v := value.(zapcore.Level)
+		if v < minLvl.Level() {
+			minLvl = zap.NewAtomicLevelAt(v)
+		}
+		return true
+	})
+
+	return minLvl
+}
+
 func (l *logLevelConfig) update(cfg *viper.Viper, log *zap.Logger) {
-	if lvl, err := getLogLevel(cfg); err != nil {
+	lvl, err := getLogLevel(cfg)
+	if err != nil {
 		log.Warn(logs.LogLevelWontBeUpdated, zap.Error(err), logs.TagField(logs.TagApp))
-	} else {
-		l.logLevel.SetLevel(lvl)
 	}
 
 	if err := l.tagsConfig.update(cfg, l.logLevel.Level()); err != nil {
 		log.Warn(logs.TagsLogConfigWontBeUpdated, zap.Error(err), logs.TagField(logs.TagApp))
 	}
+
+	l.logLevel.SetLevel(minLogLevel(zap.NewAtomicLevelAt(lvl), l.tagsConfig).Level())
 }
 
 func (t *tagsConfig) LevelEnabled(tag string, tgtLevel zapcore.Level) bool {
@@ -170,6 +186,10 @@ func (t *tagsConfig) LevelEnabled(tag string, tgtLevel zapcore.Level) bool {
 	return lvl.(zapcore.Level).Enabled(tgtLevel)
 }
 
+func (t *tagsConfig) DefaultLevel() zap.AtomicLevel {
+	return t.defaultLvl
+}
+
 func (t *tagsConfig) update(cfg *viper.Viper, ll zapcore.Level) error {
 	tags, err := fetchLogTagsConfig(cfg, ll)
 	if err != nil {
@@ -194,6 +214,7 @@ func (t *tagsConfig) update(cfg *viper.Viper, ll zapcore.Level) error {
 	for k, v := range tags {
 		t.tagLogs.Store(k, v)
 	}
+	t.defaultLvl = zap.NewAtomicLevelAt(ll)
 
 	return nil
 }
diff --git a/cmd/http-gw/logger.go b/cmd/http-gw/logger.go
index 91105f7..841e507 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
+	DefaultLevel() zap.AtomicLevel
 }
 
 func (c *zapCoreTagFilterWrapper) Enabled(level zapcore.Level) bool {
@@ -73,14 +74,10 @@ func (c *zapCoreTagFilterWrapper) Write(entry zapcore.Entry, fields []zapcore.Fi
 func (c *zapCoreTagFilterWrapper) shouldSkip(entry zapcore.Entry, fields []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)
 		}
 	}
-
-	return false
+	return !c.core.Enabled(entry.Level)
 }
 
 func (c *zapCoreTagFilterWrapper) Sync() error {
diff --git a/cmd/http-gw/settings.go b/cmd/http-gw/settings.go
index 132c627..982b401 100644
--- a/cmd/http-gw/settings.go
+++ b/cmd/http-gw/settings.go
@@ -113,7 +113,7 @@ const (
 
 	cfgLoggerTags           = "logger.tags"
 	cfgLoggerTagsPrefixTmpl = cfgLoggerTags + ".%d."
-	cfgLoggerTagsNameTmpl   = cfgLoggerTagsPrefixTmpl + "name"
+	cfgLoggerTagsNameTmpl   = cfgLoggerTagsPrefixTmpl + "names"
 	cfgLoggerTagsLevelTmpl  = cfgLoggerTagsPrefixTmpl + "level"
 
 	// Wallet.
@@ -516,8 +516,8 @@ func fetchLogTagsConfig(v *viper.Viper, defaultLvl zapcore.Level) (map[string]za
 	res := make(map[string]zapcore.Level)
 
 	for i := 0; ; i++ {
-		name := v.GetString(fmt.Sprintf(cfgLoggerTagsNameTmpl, i))
-		if name == "" {
+		tagNames := v.GetString(fmt.Sprintf(cfgLoggerTagsNameTmpl, i))
+		if tagNames == "" {
 			break
 		}
 
@@ -529,7 +529,12 @@ func fetchLogTagsConfig(v *viper.Viper, defaultLvl zapcore.Level) (map[string]za
 			}
 		}
 
-		res[name] = lvl
+		for _, tagName := range strings.Split(tagNames, ",") {
+			tagName = strings.TrimSpace(tagName)
+			if len(tagName) != 0 {
+				res[tagName] = lvl
+			}
+		}
 	}
 
 	if len(res) == 0 && !v.IsSet(cfgLoggerTags) {
diff --git a/config/config.env b/config/config.env
index 0ff2dec..72492d8 100644
--- a/config/config.env
+++ b/config/config.env
@@ -20,8 +20,9 @@ HTTP_GW_LOGGER_SAMPLING_ENABLED=false
 HTTP_GW_LOGGER_SAMPLING_INITIAL=100
 HTTP_GW_LOGGER_SAMPLING_THEREAFTER=100
 HTTP_GW_LOGGER_SAMPLING_INTERVAL=1s
-HTTP_GW_LOGGER_TAGS_0_NAME=app
-HTTP_GW_LOGGER_TAGS_1_NAME=datapath
+HTTP_GW_LOGGER_TAGS_0_NAMES=app,datapath
+HTTP_GW_LOGGER_TAGS_0_LEVEL=level
+HTTP_GW_LOGGER_TAGS_1_NAME=external_storage_tree
 
 HTTP_GW_SERVER_0_ADDRESS=0.0.0.0:443
 HTTP_GW_SERVER_0_TLS_ENABLED=false
diff --git a/config/config.yaml b/config/config.yaml
index 05bba2e..ccd025e 100644
--- a/config/config.yaml
+++ b/config/config.yaml
@@ -30,8 +30,7 @@ logger:
     thereafter: 100
     interval: 1s
   tags:
-    - name: app
-    - name: datapath
+    - names: app,datapath
       level: debug
 
 server:
diff --git a/docs/gate-configuration.md b/docs/gate-configuration.md
index 628d3c7..1dec574 100644
--- a/docs/gate-configuration.md
+++ b/docs/gate-configuration.md
@@ -176,10 +176,9 @@ logger:
     thereafter: 100
     interval: 1s
   tags:
-    - name: "app"
+    - names: "app,datapath"
       level: info        
-    - name: "datapath"
-    - name: "external_storage_tree"
+    - names: "external_storage_tree"
 ```
 
 | Parameter             | Type       | SIGHUP reload | Default value | Description                                                                                        |
@@ -199,14 +198,14 @@ parameter. Available tags:
 
 ```yaml
 tags:
-  - name: "app"
+  - names: "app,datapath"
     level: info
 ```
 
-| Parameter             | Type       | SIGHUP reload | Default value             | Description                                                                                           |
-|-----------------------|------------|---------------|---------------------------|-------------------------------------------------------------------------------------------------------|
-| `name`                | `string`   | yes           |                           | Tag name. Possible values see below in `Tag values` section.                                          |
-| `level`               | `string`   | yes           | Value from `logger.level` | Logging level for specific tag. Possible values: `debug`, `info`, `warn`, `dpanic`, `panic`, `fatal`. |
+| Parameter | Type       | SIGHUP reload | Default value             | Description                                                                                           |
+|-----------|------------|---------------|---------------------------|-------------------------------------------------------------------------------------------------------|
+| `names`   | `[]string` | yes           |                           | Tag names separated by `,`.  Possible values see below in `Tag values` section.                       |
+| `level`   | `string`   | yes           | Value from `logger.level` | Logging level for specific tag. Possible values: `debug`, `info`, `warn`, `dpanic`, `panic`, `fatal`. |
 
 ### Tag values