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