github.com/theQRL/go-zond@v0.1.1/log/syslog.go (about) 1 //go:build !windows && !plan9 2 // +build !windows,!plan9 3 4 package log 5 6 import ( 7 "log/syslog" 8 "strings" 9 ) 10 11 // SyslogHandler opens a connection to the system syslog daemon by calling 12 // syslog.New and writes all records to it. 13 func SyslogHandler(priority syslog.Priority, tag string, fmtr Format) (Handler, error) { 14 wr, err := syslog.New(priority, tag) 15 return sharedSyslog(fmtr, wr, err) 16 } 17 18 // SyslogNetHandler opens a connection to a log daemon over the network and writes 19 // all log records to it. 20 func SyslogNetHandler(net, addr string, priority syslog.Priority, tag string, fmtr Format) (Handler, error) { 21 wr, err := syslog.Dial(net, addr, priority, tag) 22 return sharedSyslog(fmtr, wr, err) 23 } 24 25 func sharedSyslog(fmtr Format, sysWr *syslog.Writer, err error) (Handler, error) { 26 if err != nil { 27 return nil, err 28 } 29 h := FuncHandler(func(r *Record) error { 30 var syslogFn = sysWr.Info 31 switch r.Lvl { 32 case LvlCrit: 33 syslogFn = sysWr.Crit 34 case LvlError: 35 syslogFn = sysWr.Err 36 case LvlWarn: 37 syslogFn = sysWr.Warning 38 case LvlInfo: 39 syslogFn = sysWr.Info 40 case LvlDebug: 41 syslogFn = sysWr.Debug 42 case LvlTrace: 43 syslogFn = func(m string) error { return nil } // There's no syslog level for trace 44 } 45 46 s := strings.TrimSpace(string(fmtr.Format(r))) 47 return syslogFn(s) 48 }) 49 return LazyHandler(&closingHandler{sysWr, h}), nil 50 } 51 52 func (m muster) SyslogHandler(priority syslog.Priority, tag string, fmtr Format) Handler { 53 return must(SyslogHandler(priority, tag, fmtr)) 54 } 55 56 func (m muster) SyslogNetHandler(net, addr string, priority syslog.Priority, tag string, fmtr Format) Handler { 57 return must(SyslogNetHandler(net, addr, priority, tag, fmtr)) 58 }