syslog.go 767 B

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