|
|
@@ -2,95 +2,88 @@
|
|
|
|
|
|
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 int, level LogLevel) 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)
|
|
|
-// }
|
|
|
+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
|
|
|
+}
|