github.com/lmars/docker@v1.6.0-rc2/daemon/logger/syslog/syslog.go (about) 1 package syslog 2 3 import ( 4 "fmt" 5 "log/syslog" 6 "os" 7 "path" 8 "sync" 9 10 "github.com/docker/docker/daemon/logger" 11 ) 12 13 type Syslog struct { 14 writer *syslog.Writer 15 tag string 16 mu sync.Mutex 17 } 18 19 func New(tag string) (logger.Logger, error) { 20 log, err := syslog.New(syslog.LOG_USER, path.Base(os.Args[0])) 21 if err != nil { 22 return nil, err 23 } 24 return &Syslog{ 25 writer: log, 26 tag: tag, 27 }, nil 28 } 29 30 func (s *Syslog) Log(msg *logger.Message) error { 31 logMessage := fmt.Sprintf("%s: %s", s.tag, string(msg.Line)) 32 if msg.Source == "stderr" { 33 if err := s.writer.Err(logMessage); err != nil { 34 return err 35 } 36 37 } else { 38 if err := s.writer.Info(logMessage); err != nil { 39 return err 40 } 41 } 42 return nil 43 } 44 45 func (s *Syslog) Close() error { 46 if s.writer != nil { 47 return s.writer.Close() 48 } 49 return nil 50 } 51 52 func (s *Syslog) Name() string { 53 return "Syslog" 54 }