58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// +build !windows,!plan9
 | 
						|
 | 
						|
package log
 | 
						|
 | 
						|
import (
 | 
						|
	"log/syslog"
 | 
						|
	"strings"
 | 
						|
)
 | 
						|
 | 
						|
// SyslogHandler opens a connection to the system syslog daemon by calling
 | 
						|
// syslog.New and writes all records to it.
 | 
						|
func SyslogHandler(priority syslog.Priority, tag string, fmtr Format) (Handler, error) {
 | 
						|
	wr, err := syslog.New(priority, tag)
 | 
						|
	return sharedSyslog(fmtr, wr, err)
 | 
						|
}
 | 
						|
 | 
						|
// SyslogNetHandler opens a connection to a log daemon over the network and writes
 | 
						|
// all log records to it.
 | 
						|
func SyslogNetHandler(net, addr string, priority syslog.Priority, tag string, fmtr Format) (Handler, error) {
 | 
						|
	wr, err := syslog.Dial(net, addr, priority, tag)
 | 
						|
	return sharedSyslog(fmtr, wr, err)
 | 
						|
}
 | 
						|
 | 
						|
func sharedSyslog(fmtr Format, sysWr *syslog.Writer, err error) (Handler, error) {
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	h := FuncHandler(func(r *Record) error {
 | 
						|
		var syslogFn = sysWr.Info
 | 
						|
		switch r.Lvl {
 | 
						|
		case LvlCrit:
 | 
						|
			syslogFn = sysWr.Crit
 | 
						|
		case LvlError:
 | 
						|
			syslogFn = sysWr.Err
 | 
						|
		case LvlWarn:
 | 
						|
			syslogFn = sysWr.Warning
 | 
						|
		case LvlInfo:
 | 
						|
			syslogFn = sysWr.Info
 | 
						|
		case LvlDebug:
 | 
						|
			syslogFn = sysWr.Debug
 | 
						|
		case LvlTrace:
 | 
						|
			syslogFn = func(m string) error { return nil } // There's no syslog level for trace
 | 
						|
		}
 | 
						|
 | 
						|
		s := strings.TrimSpace(string(fmtr.Format(r)))
 | 
						|
		return syslogFn(s)
 | 
						|
	})
 | 
						|
	return LazyHandler(&closingHandler{sysWr, h}), nil
 | 
						|
}
 | 
						|
 | 
						|
func (m muster) SyslogHandler(priority syslog.Priority, tag string, fmtr Format) Handler {
 | 
						|
	return must(SyslogHandler(priority, tag, fmtr))
 | 
						|
}
 | 
						|
 | 
						|
func (m muster) SyslogNetHandler(net, addr string, priority syslog.Priority, tag string, fmtr Format) Handler {
 | 
						|
	return must(SyslogNetHandler(net, addr, priority, tag, fmtr))
 | 
						|
}
 |