2021-08-25 19:46:29 +03:00
|
|
|
//go:build !windows && !plan9
|
2017-02-20 18:39:36 +03:00
|
|
|
// +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
|
2017-02-20 19:05:15 +03:00
|
|
|
case LvlTrace:
|
|
|
|
syslogFn = func(m string) error { return nil } // There's no syslog level for trace
|
2017-02-20 18:39:36 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
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))
|
|
|
|
}
|