|  | // +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 | 
|  | } |