syslog.go 956 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // +build linux
  2. package syslog
  3. import (
  4. "fmt"
  5. "io"
  6. "log/syslog"
  7. "os"
  8. "path"
  9. "github.com/Sirupsen/logrus"
  10. "github.com/docker/docker/daemon/logger"
  11. )
  12. const name = "syslog"
  13. type Syslog struct {
  14. writer *syslog.Writer
  15. }
  16. func init() {
  17. if err := logger.RegisterLogDriver(name, New); err != nil {
  18. logrus.Fatal(err)
  19. }
  20. }
  21. func New(ctx logger.Context) (logger.Logger, error) {
  22. tag := ctx.ContainerID[:12]
  23. log, err := syslog.New(syslog.LOG_DAEMON, fmt.Sprintf("%s/%s", path.Base(os.Args[0]), tag))
  24. if err != nil {
  25. return nil, err
  26. }
  27. return &Syslog{
  28. writer: log,
  29. }, nil
  30. }
  31. func (s *Syslog) Log(msg *logger.Message) error {
  32. if msg.Source == "stderr" {
  33. return s.writer.Err(string(msg.Line))
  34. }
  35. return s.writer.Info(string(msg.Line))
  36. }
  37. func (s *Syslog) Close() error {
  38. return s.writer.Close()
  39. }
  40. func (s *Syslog) Name() string {
  41. return name
  42. }
  43. func (s *Syslog) GetReader() (io.Reader, error) {
  44. return nil, logger.ReadLogsNotSupported
  45. }