| // +build linux |
| |
| package syslog |
| |
| import ( |
| "fmt" |
| "io" |
| "log/syslog" |
| "os" |
| "path" |
| |
| "github.com/Sirupsen/logrus" |
| "github.com/docker/docker/daemon/logger" |
| ) |
| |
| const name = "syslog" |
| |
| type Syslog struct { |
| writer *syslog.Writer |
| } |
| |
| func init() { |
| if err := logger.RegisterLogDriver(name, New); err != nil { |
| logrus.Fatal(err) |
| } |
| } |
| |
| func New(ctx logger.Context) (logger.Logger, error) { |
| tag := ctx.ContainerID[:12] |
| log, err := syslog.New(syslog.LOG_DAEMON, fmt.Sprintf("%s/%s", path.Base(os.Args[0]), tag)) |
| if err != nil { |
| return nil, err |
| } |
| |
| return &Syslog{ |
| writer: log, |
| }, nil |
| } |
| |
| func (s *Syslog) Log(msg *logger.Message) error { |
| if msg.Source == "stderr" { |
| return s.writer.Err(string(msg.Line)) |
| } |
| return s.writer.Info(string(msg.Line)) |
| } |
| |
| func (s *Syslog) Close() error { |
| return s.writer.Close() |
| } |
| |
| func (s *Syslog) Name() string { |
| return name |
| } |
| |
| func (s *Syslog) GetReader() (io.Reader, error) { |
| return nil, logger.ReadLogsNotSupported |
| } |