// +build linux package journald import ( "fmt" "io" "github.com/Sirupsen/logrus" "github.com/coreos/go-systemd/journal" "github.com/docker/docker/daemon/logger" ) const name = "journald" type Journald struct { Jmap map[string]string } func init() { if err := logger.RegisterLogDriver(name, New); err != nil { logrus.Fatal(err) } } func New(ctx logger.Context) (logger.Logger, error) { if !journal.Enabled() { return nil, fmt.Errorf("journald is not enabled on this host") } // Strip a leading slash so that people can search for // CONTAINER_NAME=foo rather than CONTAINER_NAME=/foo. name := ctx.ContainerName if name[0] == '/' { name = name[1:] } jmap := map[string]string{ "CONTAINER_ID": ctx.ContainerID[:12], "CONTAINER_ID_FULL": ctx.ContainerID, "CONTAINER_NAME": name} return &Journald{Jmap: jmap}, nil } func (s *Journald) Log(msg *logger.Message) error { if msg.Source == "stderr" { return journal.Send(string(msg.Line), journal.PriErr, s.Jmap) } return journal.Send(string(msg.Line), journal.PriInfo, s.Jmap) } func (s *Journald) Close() error { return nil } func (s *Journald) Name() string { return name } func (s *Journald) GetReader() (io.Reader, error) { return nil, logger.ReadLogsNotSupported }