From 6362843e67f21274c3ee5a719d3a6393c5612699 Mon Sep 17 00:00:00 2001 From: Sascha Andres Date: Fri, 10 Mar 2017 10:34:13 +0100 Subject: [PATCH] Log payload only [logentries] If you want to use the advanced query in logentries logging in json is very useful. If you do not need the advanced information with --log-opt line-only=true just logs the payload Signed-off-by: Sascha Andres --- daemon/logger/logentries/logentries.go | 44 ++++++++++++++++++-------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/daemon/logger/logentries/logentries.go b/daemon/logger/logentries/logentries.go index 7f6ff471db..e28707c746 100644 --- a/daemon/logger/logentries/logentries.go +++ b/daemon/logger/logentries/logentries.go @@ -4,9 +4,11 @@ package logentries import ( "fmt" + "strconv" "github.com/bsphere/le_go" "github.com/docker/docker/daemon/logger" + "github.com/pkg/errors" "github.com/sirupsen/logrus" ) @@ -16,11 +18,13 @@ type logentries struct { containerName string writer *le_go.Logger extra map[string]string + lineOnly bool } const ( - name = "logentries" - token = "logentries-token" + name = "logentries" + token = "logentries-token" + lineonly = "line-only" ) func init() { @@ -38,32 +42,44 @@ func init() { func New(info logger.Info) (logger.Logger, error) { logrus.WithField("container", info.ContainerID). WithField("token", info.Config[token]). + WithField("line-only", info.Config[lineonly]). Debug("logging driver logentries configured") log, err := le_go.Connect(info.Config[token]) if err != nil { - return nil, err + return nil, errors.Wrap(err, "error connecting to logentries") + } + var lineOnly bool + if lineOnly, err = strconv.ParseBool(info.Config[lineonly]); err != nil { + return nil, errors.Wrap(err, "error parsing lineonly option") } return &logentries{ containerID: info.ContainerID, containerName: info.ContainerName, writer: log, + lineOnly: lineOnly, }, nil } func (f *logentries) Log(msg *logger.Message) error { - data := map[string]string{ - "container_id": f.containerID, - "container_name": f.containerName, - "source": msg.Source, - "log": string(msg.Line), + if !f.lineOnly { + data := map[string]string{ + "container_id": f.containerID, + "container_name": f.containerName, + "source": msg.Source, + "log": string(msg.Line), + } + for k, v := range f.extra { + data[k] = v + } + ts := msg.Timestamp + logger.PutMessage(msg) + f.writer.Println(f.tag, ts, data) + } else { + line := msg.Line + logger.PutMessage(msg) + f.writer.Println(line) } - for k, v := range f.extra { - data[k] = v - } - ts := msg.Timestamp - logger.PutMessage(msg) - f.writer.Println(f.tag, ts, data) return nil }