| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- //+build !windows,!nacl,!plan9
- package log
- import (
- "errors"
- "log/syslog"
- "github.com/inconshreveable/log15"
- )
- type SysLogHandler struct {
- syslog *syslog.Writer
- Network string
- Address string
- Facility string
- Tag string
- Format log15.Format
- }
- func NewSyslog() *SysLogHandler {
- return &SysLogHandler{
- Format: log15.LogfmtFormat(),
- }
- }
- func (sw *SysLogHandler) Init() error {
- prio, err := parseFacility(sw.Facility)
- if err != nil {
- return err
- }
- w, err := syslog.Dial(sw.Network, sw.Address, prio, sw.Tag)
- if err != nil {
- return err
- }
- sw.syslog = w
- return nil
- }
- func (sw *SysLogHandler) Log(r *log15.Record) error {
- var err error
- msg := string(sw.Format.Format(r))
- switch r.Lvl {
- case log15.LvlDebug:
- err = sw.syslog.Debug(msg)
- case log15.LvlInfo:
- err = sw.syslog.Info(msg)
- case log15.LvlWarn:
- err = sw.syslog.Warning(msg)
- case log15.LvlError:
- err = sw.syslog.Err(msg)
- case log15.LvlCrit:
- err = sw.syslog.Crit(msg)
- default:
- err = errors.New("invalid syslog level")
- }
- return err
- }
- func (sw *SysLogHandler) Close() {
- sw.syslog.Close()
- }
- var facilities = map[string]syslog.Priority{
- "user": syslog.LOG_USER,
- "daemon": syslog.LOG_DAEMON,
- "local0": syslog.LOG_LOCAL0,
- "local1": syslog.LOG_LOCAL1,
- "local2": syslog.LOG_LOCAL2,
- "local3": syslog.LOG_LOCAL3,
- "local4": syslog.LOG_LOCAL4,
- "local5": syslog.LOG_LOCAL5,
- "local6": syslog.LOG_LOCAL6,
- "local7": syslog.LOG_LOCAL7,
- }
- func parseFacility(facility string) (syslog.Priority, error) {
- prio, ok := facilities[facility]
- if !ok {
- return syslog.LOG_LOCAL0, errors.New("invalid syslog facility")
- }
- return prio, nil
- }
|