Browse code

Pass log-level to containerd

dockerd allows the `--log-level` to be specified, but this log-level
was not forwarded to the containerd process.

This patch sets containerd's log-level to the same as dockerd if a
custom level is provided.

Now that `--log-level` is also passed to containerd, the default "info"
is removed, so that containerd's default (or the level configured in containerd.toml)
is still used if no log-level is set.

Before this change:

containerd would always be started without a log-level set (only the level that's configured in `containerd.toml`);

```
root 1014 2.5 2.1 496484 43468 pts/0 Sl+ 12:23 0:00 dockerd
root 1023 1.2 1.1 681768 23832 ? Ssl 12:23 0:00 \_ docker-containerd --config /var/run/docker/containerd/containerd.toml
```

After this change:

when running `dockerd` without options (same as current);

```
root 1014 2.5 2.1 496484 43468 pts/0 Sl+ 12:23 0:00 dockerd
root 1023 1.2 1.1 681768 23832 ? Ssl 12:23 0:00 \_ docker-containerd --config /var/run/docker/containerd/containerd.toml
```

when running `dockerd --debug`:

```
root 600 0.8 2.1 512876 43180 pts/0 Sl+ 12:20 0:00 dockerd --debug
root 608 0.6 1.1 624428 23672 ? Ssl 12:20 0:00 \_ docker-containerd --config /var/run/docker/containerd/containerd.toml --log-level debug
```

when running `dockerd --log-level=panic`

```
root 747 0.6 2.1 496548 43996 pts/0 Sl+ 12:21 0:00 dockerd --log-level=panic
root 755 0.7 1.1 550696 24100 ? Ssl 12:21 0:00 \_ docker-containerd --config /var/run/docker/containerd/containerd.toml --log-level panic
```

combining `--debug` and `--log-level` (`--debug` takes precedence):

```
root 880 2.7 2.1 634692 43336 pts/0 Sl+ 12:23 0:00 dockerd --debug --log-level=panic
root 888 1.0 1.1 616232 23652 ? Ssl 12:23 0:00 \_ docker-containerd --config /var/run/docker/containerd/containerd.toml --log-level debug
```

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>

Sebastiaan van Stijn authored on 2018/07/09 21:16:35
Showing 4 changed files
... ...
@@ -48,6 +48,8 @@ func (cli *DaemonCli) getPlatformRemoteOptions() ([]libcontainerd.RemoteOption,
48 48
 	}
49 49
 	if cli.Config.Debug {
50 50
 		opts = append(opts, libcontainerd.WithLogLevel("debug"))
51
+	} else if cli.Config.LogLevel != "" {
52
+		opts = append(opts, libcontainerd.WithLogLevel(cli.Config.LogLevel))
51 53
 	}
52 54
 	if cli.Config.ContainerdAddr != "" {
53 55
 		opts = append(opts, libcontainerd.WithRemoteAddr(cli.Config.ContainerdAddr))
... ...
@@ -221,6 +221,11 @@ func (r *remote) startContainerd() error {
221 221
 	}
222 222
 
223 223
 	args := []string{"--config", configFile}
224
+
225
+	if r.Debug.Level != "" {
226
+		args = append(args, "--log-level", r.Debug.Level)
227
+	}
228
+
224 229
 	cmd := exec.Command(binaryName, args...)
225 230
 	// redirect containerd logs to docker logs
226 231
 	cmd.Stdout = os.Stdout
... ...
@@ -28,9 +28,6 @@ func (r *remote) setDefaults() {
28 28
 	if r.Debug.Address == "" {
29 29
 		r.Debug.Address = filepath.Join(r.stateDir, debugSockFile)
30 30
 	}
31
-	if r.Debug.Level == "" {
32
-		r.Debug.Level = "info"
33
-	}
34 31
 	if r.OOMScore == 0 {
35 32
 		r.OOMScore = -999
36 33
 	}
... ...
@@ -18,9 +18,6 @@ func (r *remote) setDefaults() {
18 18
 	if r.Debug.Address == "" {
19 19
 		r.Debug.Address = debugPipeName
20 20
 	}
21
-	if r.Debug.Level == "" {
22
-		r.Debug.Level = "info"
23
-	}
24 21
 	if r.snapshotter == "" {
25 22
 		r.snapshotter = "naive" // TODO(mlaventure): switch to "windows" once implemented
26 23
 	}