55 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // +build !windows,!nacl,!plan9
 | |
| 
 | |
| package logrus_syslog
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"github.com/Sirupsen/logrus"
 | |
| 	"log/syslog"
 | |
| 	"os"
 | |
| )
 | |
| 
 | |
| // 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 {
 | |
| 	line, err := entry.String()
 | |
| 	if err != nil {
 | |
| 		fmt.Fprintf(os.Stderr, "Unable to read entry, %v", err)
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	switch entry.Level {
 | |
| 	case logrus.PanicLevel:
 | |
| 		return hook.Writer.Crit(line)
 | |
| 	case logrus.FatalLevel:
 | |
| 		return hook.Writer.Crit(line)
 | |
| 	case logrus.ErrorLevel:
 | |
| 		return hook.Writer.Err(line)
 | |
| 	case logrus.WarnLevel:
 | |
| 		return hook.Writer.Warning(line)
 | |
| 	case logrus.InfoLevel:
 | |
| 		return hook.Writer.Info(line)
 | |
| 	case logrus.DebugLevel:
 | |
| 		return hook.Writer.Debug(line)
 | |
| 	default:
 | |
| 		return nil
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (hook *SyslogHook) Levels() []logrus.Level {
 | |
| 	return logrus.AllLevels
 | |
| }
 | 
