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