logrus/hooks/syslog/syslog.go

60 lines
1.3 KiB
Go
Raw Normal View History

2014-07-18 07:28:40 +00:00
package logrus_syslog
import (
"fmt"
"github.com/Sirupsen/logrus"
2014-07-28 05:01:56 +00:00
"log/syslog"
"os"
2014-07-18 07:28:40 +00:00
)
// SyslogHook to send logs via syslog.
2014-07-28 05:01:56 +00:00
type SyslogHook struct {
Writer *syslog.Writer
SyslogNetwork string
SyslogRaddr string
2014-07-18 07:28:40 +00:00
}
// 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 {
2014-07-28 05:04:55 +00:00
line, err := entry.String()
2014-07-18 07:28:40 +00:00
if err != nil {
fmt.Fprintf(os.Stderr, "Unable to read entry, %v", err)
return err
}
switch entry.Data["level"] {
case "panic":
return hook.Writer.Crit(line)
case "fatal":
return hook.Writer.Crit(line)
case "error":
return hook.Writer.Err(line)
case "warn":
return hook.Writer.Warning(line)
case "info":
return hook.Writer.Info(line)
case "debug":
return hook.Writer.Debug(line)
default:
return nil
}
}
func (hook *SyslogHook) Levels() []logrus.Level {
return []logrus.Level{
2014-07-28 05:43:21 +00:00
logrus.PanicLevel,
logrus.FatalLevel,
logrus.ErrorLevel,
logrus.WarnLevel,
logrus.InfoLevel,
logrus.DebugLevel,
2014-07-18 07:28:40 +00:00
}
}