| // +build !windows,!nacl,!plan9 |
| |
| package syslog |
| |
| import ( |
| "fmt" |
| "log/syslog" |
| "os" |
| |
| "github.com/sirupsen/logrus" |
| ) |
| |
| // SyslogHook to send logs via syslog. |
| type SyslogHook struct { |
| Writer *syslog.Writer |
| SyslogNetwork string |
| SyslogRaddr string |
| } |
| |
| // Creates a hook to be added to an instance of logger. This is called with |
| // `hook, err := NewSyslogHook("udp", "localhost:514", syslog.LOG_DEBUG, "")` |
| // `if err == nil { log.Hooks.Add(hook) }` |
| func NewSyslogHook(network, raddr string, priority syslog.Priority, tag string) (*SyslogHook, error) { |
| w, err := syslog.Dial(network, raddr, priority, tag) |
| return &SyslogHook{w, network, raddr}, err |
| } |
| |
| func (hook *SyslogHook) Fire(entry *logrus.Entry) error { |
| line, err := entry.String() |
| if err != nil { |
| fmt.Fprintf(os.Stderr, "Unable to read entry, %v", err) |
| return err |
| } |
| |
| switch entry.Level { |
| case logrus.PanicLevel: |
| return hook.Writer.Crit(line) |
| case logrus.FatalLevel: |
| return hook.Writer.Crit(line) |
| case logrus.ErrorLevel: |
| return hook.Writer.Err(line) |
| case logrus.WarnLevel: |
| return hook.Writer.Warning(line) |
| case logrus.InfoLevel: |
| return hook.Writer.Info(line) |
| case logrus.DebugLevel, logrus.TraceLevel: |
| return hook.Writer.Debug(line) |
| default: |
| return nil |
| } |
| } |
| |
| func (hook *SyslogHook) Levels() []logrus.Level { |
| return logrus.AllLevels |
| } |