diff --git a/container/container.go b/container/container.go index 6313163d4c..cf58ec1fe2 100644 --- a/container/container.go +++ b/container/container.go @@ -315,6 +315,7 @@ func (container *Container) StartLogger(cfg containertypes.LogConfig) (logger.Lo ContainerCreated: container.Created, ContainerEnv: container.Config.Env, ContainerLabels: container.Config.Labels, + DaemonName: "docker", } // Set logging file for "json-logger" diff --git a/daemon/logger/context.go b/daemon/logger/context.go index eb54c31136..2b0e071f66 100644 --- a/daemon/logger/context.go +++ b/daemon/logger/context.go @@ -20,6 +20,7 @@ type Context struct { ContainerEnv []string ContainerLabels map[string]string LogPath string + DaemonName string } // ExtraAttributes returns the user-defined extra attributes (labels, diff --git a/daemon/logger/fluentd/fluentd.go b/daemon/logger/fluentd/fluentd.go index 987edb163c..137ab07696 100644 --- a/daemon/logger/fluentd/fluentd.go +++ b/daemon/logger/fluentd/fluentd.go @@ -65,7 +65,7 @@ func New(ctx logger.Context) (logger.Logger, error) { return nil, err } - tag, err := loggerutils.ParseLogTag(ctx, "docker.{{.ID}}") + tag, err := loggerutils.ParseLogTag(ctx, "{{.DaemonName}}.{{.ID}}") if err != nil { return nil, err } diff --git a/daemon/logger/loggerutils/log_tag_test.go b/daemon/logger/loggerutils/log_tag_test.go index eaa3e4b089..e2aa4358aa 100644 --- a/daemon/logger/loggerutils/log_tag_test.go +++ b/daemon/logger/loggerutils/log_tag_test.go @@ -18,6 +18,12 @@ func TestParseLogTag(t *testing.T) { assertTag(t, e, tag, "test-image/test-container/container-ab") } +func TestParseLogTagEmptyTag(t *testing.T) { + ctx := buildContext(map[string]string{}) + tag, e := ParseLogTag(ctx, "{{.DaemonName}}/{{.ID}}") + assertTag(t, e, tag, "test-dockerd/container-ab") +} + // Helpers func buildContext(cfg map[string]string) logger.Context { @@ -27,6 +33,7 @@ func buildContext(cfg map[string]string) logger.Context { ContainerImageID: "image-abcdefghijklmnopqrstuvwxyz01234567890", ContainerImageName: "test-image", Config: cfg, + DaemonName: "test-dockerd", } } diff --git a/daemon/logger/syslog/syslog.go b/daemon/logger/syslog/syslog.go index 52df215d51..9561e061c6 100644 --- a/daemon/logger/syslog/syslog.go +++ b/daemon/logger/syslog/syslog.go @@ -10,7 +10,6 @@ import ( "net" "net/url" "os" - "path" "strconv" "strings" "time" @@ -91,7 +90,7 @@ func rfc5424microformatterWithAppNameAsTag(p syslog.Priority, hostname, tag, con // the context. Supported context configuration variables are // syslog-address, syslog-facility, syslog-format. func New(ctx logger.Context) (logger.Logger, error) { - tag, err := loggerutils.ParseLogTag(ctx, "{{.ID}}") + tag, err := loggerutils.ParseLogTag(ctx, "{{.DaemonName}}/{{.ID}}") if err != nil { return nil, err } @@ -111,17 +110,15 @@ func New(ctx logger.Context) (logger.Logger, error) { return nil, err } - logTag := path.Base(os.Args[0]) + "/" + tag - var log *syslog.Writer if proto == secureProto { tlsConfig, tlsErr := parseTLSConfig(ctx.Config) if tlsErr != nil { return nil, tlsErr } - log, err = syslog.DialWithTLSConfig(proto, address, facility, logTag, tlsConfig) + log, err = syslog.DialWithTLSConfig(proto, address, facility, tag, tlsConfig) } else { - log, err = syslog.Dial(proto, address, facility, logTag) + log, err = syslog.Dial(proto, address, facility, tag) } if err != nil { diff --git a/docs/admin/logging/log_tags.md b/docs/admin/logging/log_tags.md index aa099e00b8..6e4d0dbd04 100644 --- a/docs/admin/logging/log_tags.md +++ b/docs/admin/logging/log_tags.md @@ -30,6 +30,7 @@ Docker supports some special template markup you can use when specifying a tag's | `{{.ImageID}}` | The first 12 characters of the container's image id. | | `{{.ImageFullID}}` | The container's full image identifier. | | `{{.ImageName}}` | The name of the image used by the container. | +| `{{.DaemonName}}` | The name of the docker program (`docker`). | For example, specifying a `--log-opt tag="{{.ImageName}}/{{.Name}}/{{.ID}}"` value yields `syslog` log lines like: