SyslogHook

This commit is contained in:
Didip Kerabat 2014-07-18 00:28:40 -07:00
parent 23c2cf5a8b
commit 5c909080d7
2 changed files with 87 additions and 0 deletions

61
hooks/syslog/syslog.go Normal file
View File

@ -0,0 +1,61 @@
package logrus_syslog
import (
"os"
"fmt"
"log/syslog"
"github.com/Sirupsen/logrus"
)
// 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 {
reader, err := entry.Reader()
if err != nil {
fmt.Fprintf(os.Stderr, "Unable to read entry, %v", err)
return err
}
line := reader.String()
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{
logrus.Panic,
logrus.Fatal,
logrus.Error,
logrus.Warn,
logrus.Info,
logrus.Debug,
}
}

View File

@ -0,0 +1,26 @@
package logrus_syslog
import (
"testing"
"log/syslog"
"github.com/Sirupsen/logrus"
)
func TestLocalhostAddAndPrint(t *testing.T) {
log := logrus.New()
hook, err := NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "")
if err != nil {
t.Errorf("Unable to connect to local syslog.")
}
log.Hooks.Add(hook)
for _, level := range hook.Levels() {
if len(log.Hooks[level]) != 1 {
t.Errorf("SyslogHook was not added. The length of log.Hooks[%v]: %v", level, len(log.Hooks[level]))
}
}
log.Info("Congratulations!")
}