syslog.go 823 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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. if err := s.writer.Err(logMessage); err != nil {
  29. return err
  30. }
  31. } else {
  32. if err := s.writer.Info(logMessage); err != nil {
  33. return err
  34. }
  35. }
  36. return nil
  37. }
  38. func (s *Syslog) Close() error {
  39. return s.writer.Close()
  40. }
  41. func (s *Syslog) Name() string {
  42. return "Syslog"
  43. }