59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| //go:build !windows && !plan9
 | |
| // +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))
 | |
| }
 |