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