mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
				
	
	
		
			96 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
//+build !windows,!nacl,!plan9
 | 
						|
 | 
						|
package log
 | 
						|
 | 
						|
import (
 | 
						|
	"encoding/json"
 | 
						|
	"errors"
 | 
						|
	"log/syslog"
 | 
						|
)
 | 
						|
 | 
						|
type SyslogWriter struct {
 | 
						|
	syslog   *syslog.Writer
 | 
						|
	Network  string `json:"network"`
 | 
						|
	Address  string `json:"address"`
 | 
						|
	Facility string `json:"facility"`
 | 
						|
	Tag      string `json:"tag"`
 | 
						|
}
 | 
						|
 | 
						|
func NewSyslog() LoggerInterface {
 | 
						|
	return new(SyslogWriter)
 | 
						|
}
 | 
						|
 | 
						|
func (sw *SyslogWriter) Init(config string) error {
 | 
						|
	if err := json.Unmarshal([]byte(config), sw); err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	prio, err := parseFacility(sw.Facility)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	w, err := syslog.Dial(sw.Network, sw.Address, prio, sw.Tag)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	sw.syslog = w
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
func (sw *SyslogWriter) WriteMsg(msg string, skip int, level LogLevel) error {
 | 
						|
	var err error
 | 
						|
 | 
						|
	switch level {
 | 
						|
	case TRACE, DEBUG:
 | 
						|
		err = sw.syslog.Debug(msg)
 | 
						|
	case INFO:
 | 
						|
		err = sw.syslog.Info(msg)
 | 
						|
	case WARN:
 | 
						|
		err = sw.syslog.Warning(msg)
 | 
						|
	case ERROR:
 | 
						|
		err = sw.syslog.Err(msg)
 | 
						|
	case CRITICAL:
 | 
						|
		err = sw.syslog.Crit(msg)
 | 
						|
	case FATAL:
 | 
						|
		err = sw.syslog.Alert(msg)
 | 
						|
	default:
 | 
						|
		err = errors.New("invalid syslog level")
 | 
						|
	}
 | 
						|
 | 
						|
	return err
 | 
						|
}
 | 
						|
 | 
						|
func (sw *SyslogWriter) Destroy() {
 | 
						|
	sw.syslog.Close()
 | 
						|
}
 | 
						|
 | 
						|
func (sw *SyslogWriter) Flush() {}
 | 
						|
 | 
						|
var facilities = map[string]syslog.Priority{
 | 
						|
	"user":   syslog.LOG_USER,
 | 
						|
	"daemon": syslog.LOG_DAEMON,
 | 
						|
	"local0": syslog.LOG_LOCAL0,
 | 
						|
	"local1": syslog.LOG_LOCAL1,
 | 
						|
	"local2": syslog.LOG_LOCAL2,
 | 
						|
	"local3": syslog.LOG_LOCAL3,
 | 
						|
	"local4": syslog.LOG_LOCAL4,
 | 
						|
	"local5": syslog.LOG_LOCAL5,
 | 
						|
	"local6": syslog.LOG_LOCAL6,
 | 
						|
	"local7": syslog.LOG_LOCAL7,
 | 
						|
}
 | 
						|
 | 
						|
func parseFacility(facility string) (syslog.Priority, error) {
 | 
						|
	prio, ok := facilities[facility]
 | 
						|
	if !ok {
 | 
						|
		return syslog.LOG_LOCAL0, errors.New("invalid syslog facility")
 | 
						|
	}
 | 
						|
 | 
						|
	return prio, nil
 | 
						|
}
 | 
						|
 | 
						|
func init() {
 | 
						|
	Register("syslog", NewSyslog)
 | 
						|
}
 |