You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.6 KiB
57 lines
1.6 KiB
// +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))
|
|
}
|
|
|