2015-10-27 12:18:45 +03:00
|
|
|
// +build !windows,!nacl,!plan9
|
|
|
|
|
2017-07-18 16:18:46 +03:00
|
|
|
package syslog
|
2014-07-18 11:28:40 +04:00
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
2014-07-28 09:01:56 +04:00
|
|
|
"log/syslog"
|
|
|
|
"os"
|
2017-07-18 16:18:46 +03:00
|
|
|
|
|
|
|
"github.com/sirupsen/logrus"
|
2014-07-18 11:28:40 +04:00
|
|
|
)
|
|
|
|
|
|
|
|
// SyslogHook to send logs via syslog.
|
2014-07-28 09:01:56 +04:00
|
|
|
type SyslogHook struct {
|
|
|
|
Writer *syslog.Writer
|
|
|
|
SyslogNetwork string
|
|
|
|
SyslogRaddr string
|
2014-07-18 11:28:40 +04: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 09:04:55 +04:00
|
|
|
line, err := entry.String()
|
2014-07-18 11:28:40 +04:00
|
|
|
if err != nil {
|
|
|
|
fmt.Fprintf(os.Stderr, "Unable to read entry, %v", err)
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2014-11-23 20:02:34 +03:00
|
|
|
switch entry.Level {
|
|
|
|
case logrus.PanicLevel:
|
2014-07-18 11:28:40 +04:00
|
|
|
return hook.Writer.Crit(line)
|
2014-11-23 20:02:34 +03:00
|
|
|
case logrus.FatalLevel:
|
2014-07-18 11:28:40 +04:00
|
|
|
return hook.Writer.Crit(line)
|
2014-11-23 20:02:34 +03:00
|
|
|
case logrus.ErrorLevel:
|
2014-07-18 11:28:40 +04:00
|
|
|
return hook.Writer.Err(line)
|
2014-11-23 20:02:34 +03:00
|
|
|
case logrus.WarnLevel:
|
2014-07-18 11:28:40 +04:00
|
|
|
return hook.Writer.Warning(line)
|
2014-11-23 20:02:34 +03:00
|
|
|
case logrus.InfoLevel:
|
2014-07-18 11:28:40 +04:00
|
|
|
return hook.Writer.Info(line)
|
2017-10-20 15:40:54 +03:00
|
|
|
case logrus.DebugLevel, logrus.TraceLevel:
|
2014-07-18 11:28:40 +04:00
|
|
|
return hook.Writer.Debug(line)
|
|
|
|
default:
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (hook *SyslogHook) Levels() []logrus.Level {
|
2015-05-13 15:12:36 +03:00
|
|
|
return logrus.AllLevels
|
2014-07-18 11:28:40 +04:00
|
|
|
}
|