initial commit
[govpp.git] / vendor / github.com / Sirupsen / logrus / hooks / syslog / syslog.go
1 // +build !windows,!nacl,!plan9
2
3 package logrus_syslog
4
5 import (
6         "fmt"
7         "github.com/Sirupsen/logrus"
8         "log/syslog"
9         "os"
10 )
11
12 // SyslogHook to send logs via syslog.
13 type SyslogHook struct {
14         Writer        *syslog.Writer
15         SyslogNetwork string
16         SyslogRaddr   string
17 }
18
19 // Creates a hook to be added to an instance of logger. This is called with
20 // `hook, err := NewSyslogHook("udp", "localhost:514", syslog.LOG_DEBUG, "")`
21 // `if err == nil { log.Hooks.Add(hook) }`
22 func NewSyslogHook(network, raddr string, priority syslog.Priority, tag string) (*SyslogHook, error) {
23         w, err := syslog.Dial(network, raddr, priority, tag)
24         return &SyslogHook{w, network, raddr}, err
25 }
26
27 func (hook *SyslogHook) Fire(entry *logrus.Entry) error {
28         line, err := entry.String()
29         if err != nil {
30                 fmt.Fprintf(os.Stderr, "Unable to read entry, %v", err)
31                 return err
32         }
33
34         switch entry.Level {
35         case logrus.PanicLevel:
36                 return hook.Writer.Crit(line)
37         case logrus.FatalLevel:
38                 return hook.Writer.Crit(line)
39         case logrus.ErrorLevel:
40                 return hook.Writer.Err(line)
41         case logrus.WarnLevel:
42                 return hook.Writer.Warning(line)
43         case logrus.InfoLevel:
44                 return hook.Writer.Info(line)
45         case logrus.DebugLevel:
46                 return hook.Writer.Debug(line)
47         default:
48                 return nil
49         }
50 }
51
52 func (hook *SyslogHook) Levels() []logrus.Level {
53         return logrus.AllLevels
54 }