forked from mirror/logrus
SyslogHook
This commit is contained in:
parent
23c2cf5a8b
commit
5c909080d7
|
@ -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,
|
||||
}
|
||||
}
|
|
@ -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!")
|
||||
}
|
Loading…
Reference in New Issue