OSDN Git Service

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