|
@@ -0,0 +1,54 @@
|
|
|
+package syslog
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "log/syslog"
|
|
|
+ "os"
|
|
|
+ "path"
|
|
|
+ "sync"
|
|
|
+
|
|
|
+ "github.com/docker/docker/daemon/logger"
|
|
|
+)
|
|
|
+
|
|
|
+type Syslog struct {
|
|
|
+ writer *syslog.Writer
|
|
|
+ tag string
|
|
|
+ mu sync.Mutex
|
|
|
+}
|
|
|
+
|
|
|
+func New(tag string) (logger.Logger, error) {
|
|
|
+ log, err := syslog.New(syslog.LOG_USER, path.Base(os.Args[0]))
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ return &Syslog{
|
|
|
+ writer: log,
|
|
|
+ tag: tag,
|
|
|
+ }, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (s *Syslog) Log(msg *logger.Message) error {
|
|
|
+ logMessage := fmt.Sprintf("%s: %s", s.tag, string(msg.Line))
|
|
|
+ if msg.Source == "stderr" {
|
|
|
+ if err := s.writer.Err(logMessage); err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ if err := s.writer.Info(logMessage); err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func (s *Syslog) Close() error {
|
|
|
+ if s.writer != nil {
|
|
|
+ return s.writer.Close()
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func (s *Syslog) Name() string {
|
|
|
+ return "Syslog"
|
|
|
+}
|