3a8728b431
- noplog driver pkg for '--log-driver=none' (null object pattern) - centralized factory for log drivers (instead of case/switch) - logging drivers registers themselves to factory upon import (easy plug/unplug of drivers in daemon/logdrivers.go) - daemon now doesn't start with an invalid log driver - Name() method of loggers is actually now their cli names (made it useful) - generalized Read() logic, made it unsupported except json-file (preserves existing behavior) Spotted some duplication code around processing of legacy json-file format, didn't touch that and refactored in both places. Signed-off-by: Ahmet Alp Balkan <ahmetalpbalkan@gmail.com>
55 lines
939 B
Go
55 lines
939 B
Go
package syslog
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"log/syslog"
|
|
"os"
|
|
"path"
|
|
|
|
"github.com/Sirupsen/logrus"
|
|
"github.com/docker/docker/daemon/logger"
|
|
)
|
|
|
|
const name = "syslog"
|
|
|
|
type Syslog struct {
|
|
writer *syslog.Writer
|
|
}
|
|
|
|
func init() {
|
|
if err := logger.RegisterLogDriver(name, New); err != nil {
|
|
logrus.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func New(ctx logger.Context) (logger.Logger, error) {
|
|
tag := ctx.ContainerID[:12]
|
|
log, err := syslog.New(syslog.LOG_DAEMON, fmt.Sprintf("%s/%s", path.Base(os.Args[0]), tag))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &Syslog{
|
|
writer: log,
|
|
}, nil
|
|
}
|
|
|
|
func (s *Syslog) Log(msg *logger.Message) error {
|
|
if msg.Source == "stderr" {
|
|
return s.writer.Err(string(msg.Line))
|
|
}
|
|
return s.writer.Info(string(msg.Line))
|
|
}
|
|
|
|
func (s *Syslog) Close() error {
|
|
return s.writer.Close()
|
|
}
|
|
|
|
func (s *Syslog) Name() string {
|
|
return name
|
|
}
|
|
|
|
func (s *Syslog) GetReader() (io.Reader, error) {
|
|
return nil, logger.ReadLogsNotSupported
|
|
}
|