// +build !windows,!nacl,!plan9 package logrus_syslog import ( "fmt" "github.com/sirupsen/logrus" "log/syslog" "os" ) // 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: return hook.Writer.Debug(line) default: return nil } } func (hook *SyslogHook) Levels() []logrus.Level { return logrus.AllLevels }