| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- //+build !windows,!nacl,!plan9
- package log
- import (
- "encoding/json"
- "errors"
- "log/syslog"
- )
- type SyslogWriter struct {
- syslog *syslog.Writer
- Network string `json:"network"`
- Address string `json:"address"`
- Facility string `json:"facility"`
- Tag string `json:"tag"`
- }
- func NewSyslog() LoggerInterface {
- return new(SyslogWriter)
- }
- func (sw *SyslogWriter) Init(config string) error {
- if err := json.Unmarshal([]byte(config), sw); err != nil {
- return err
- }
- 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 *SyslogWriter) WriteMsg(msg string, skip, level int) error {
- var err error
- switch level {
- case TRACE, DEBUG:
- err = sw.syslog.Debug(msg)
- case INFO:
- err = sw.syslog.Info(msg)
- case WARN:
- err = sw.syslog.Warning(msg)
- case ERROR:
- err = sw.syslog.Err(msg)
- case CRITICAL:
- err = sw.syslog.Crit(msg)
- case FATAL:
- err = sw.syslog.Alert(msg)
- default:
- err = errors.New("invalid syslog level")
- }
- return err
- }
- func (sw *SyslogWriter) Destroy() {
- sw.syslog.Close()
- }
- func (sw *SyslogWriter) Flush() {}
- 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
- }
- func init() {
- Register("syslog", NewSyslog)
- }
|