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  }