Skip to content

Commit 06c0a57

Browse files
committed
Add fine grained log level configuration
The --loglevel cli option now also accepts strings of the form: `[<loggerName>]:<logLevel>,...` This allows to configure varying levels for individual package loggers. For example: `:debug,swarm2:info` - set the global level to `debug` and the `swarm2` one to `info`
1 parent 47861b5 commit 06c0a57

File tree

2 files changed

+29
-5
lines changed

2 files changed

+29
-5
lines changed

docker/docker-compose.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ services:
278278
restart: always
279279
entrypoint:
280280
- /rolling-shutter
281-
- "--loglevel=debug"
281+
- "--loglevel=:debug,basichost:info,swarm:info,swarm2:info,net/identify:info,pubsub:info,p2p-config:info,upgrader:info"
282282
- snapshotkeyper
283283
command: "--config /config/keyper-0.toml"
284284
volumes:
@@ -304,7 +304,7 @@ services:
304304
restart: always
305305
entrypoint:
306306
- /rolling-shutter
307-
- "--loglevel=debug"
307+
- "--loglevel=:debug,basichost:info,swarm:info,swarm2:info,net/identify:info,pubsub:info,p2p-config:info,upgrader:info"
308308
- snapshotkeyper
309309
command: "--config /config/keyper-1.toml"
310310
volumes:
@@ -330,7 +330,7 @@ services:
330330
restart: always
331331
entrypoint:
332332
- /rolling-shutter
333-
- "--loglevel=debug"
333+
- "--loglevel=:debug,basichost:info,swarm:info,swarm2:info,net/identify:info,pubsub:info,p2p-config:info,upgrader:info"
334334
- snapshotkeyper
335335
command: "--config /config/keyper-2.toml"
336336
volumes:
@@ -356,7 +356,7 @@ services:
356356
restart: always
357357
entrypoint:
358358
- /rolling-shutter
359-
- "--loglevel=debug"
359+
- "--loglevel=:debug,basichost:info,swarm:info,swarm2:info,net/identify:info,pubsub:info,p2p-config:info,upgrader:info"
360360
- snapshotkeyper
361361
command: "--config /config/keyper-3.toml"
362362
volumes:

rolling-shutter/medley/rootcmd/root.go

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package rootcmd
44
import (
55
"fmt"
66
"os"
7+
"regexp"
78
"strings"
89

910
golog "github.com/ipfs/go-log/v2"
@@ -24,6 +25,7 @@ var (
2425
ArgNameLogformat string = "logformat"
2526
logLevelArg string
2627
ArgNameLoglevel string = "loglevel"
28+
reLogLevelConfig = regexp.MustCompile("^(?:(?P<logger>[\\w/._-]+)?:(?P<level>debug|info|warn(?:ing)?|error|fatal|panic),?)+$")
2729
)
2830

2931
func configureCaller(l zerolog.Logger, short bool) zerolog.Logger {
@@ -96,7 +98,29 @@ func setupLogging() (zerolog.Logger, error) {
9698
zerolog.SetGlobalLevel(zerolog.DebugLevel)
9799
golog.SetAllLoggers(golog.LevelDebug)
98100
default:
99-
return l, errors.Errorf("flag '%s' value '%s' not recognized", ArgNameLoglevel, logLevel)
101+
if !reLogLevelConfig.MatchString(logLevel) {
102+
return l, errors.Errorf("flag '%s' value '%s' not recognized", ArgNameLoglevel, logLevel)
103+
}
104+
// parse the log level config and set the log levels
105+
for _, loggerLevel := range strings.Split(logLevel, ",") {
106+
loggerLevel = strings.TrimSpace(loggerLevel)
107+
if loggerLevel == "" {
108+
continue
109+
}
110+
parts := strings.SplitN(loggerLevel, ":", 2)
111+
loggerName := parts[0]
112+
levelName := parts[1]
113+
if loggerName == "" {
114+
level, err := zerolog.ParseLevel(levelName)
115+
if err != nil {
116+
return l, errors.Wrapf(err, "flag '%s' value '%s' not recognized", ArgNameLoglevel, logLevel)
117+
}
118+
zerolog.SetGlobalLevel(level)
119+
golog.SetLogLevel("*", levelName)
120+
} else {
121+
golog.SetLogLevel(loggerName, levelName)
122+
}
123+
}
100124
}
101125

102126
// reset the writer

0 commit comments

Comments
 (0)