github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/log/syslog.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 12:09:41</date> 10 //</624342646915076096> 11 12 //+建设!窗户,!计划9 13 14 package log 15 16 import ( 17 "log/syslog" 18 "strings" 19 ) 20 21 //SyslogHandler通过调用 22 //并将所有记录写入其中。 23 func SyslogHandler(priority syslog.Priority, tag string, fmtr Format) (Handler, error) { 24 wr, err := syslog.New(priority, tag) 25 return sharedSyslog(fmtr, wr, err) 26 } 27 28 //syslognethandler通过网络打开与日志守护程序的连接并写入 29 //所有日志记录。 30 func SyslogNetHandler(net, addr string, priority syslog.Priority, tag string, fmtr Format) (Handler, error) { 31 wr, err := syslog.Dial(net, addr, priority, tag) 32 return sharedSyslog(fmtr, wr, err) 33 } 34 35 func sharedSyslog(fmtr Format, sysWr *syslog.Writer, err error) (Handler, error) { 36 if err != nil { 37 return nil, err 38 } 39 h := FuncHandler(func(r *Record) error { 40 var syslogFn = sysWr.Info 41 switch r.Lvl { 42 case LvlCrit: 43 syslogFn = sysWr.Crit 44 case LvlError: 45 syslogFn = sysWr.Err 46 case LvlWarn: 47 syslogFn = sysWr.Warning 48 case LvlInfo: 49 syslogFn = sysWr.Info 50 case LvlDebug: 51 syslogFn = sysWr.Debug 52 case LvlTrace: 53 syslogFn = func(m string) error { return nil } //没有用于跟踪的系统日志级别 54 } 55 56 s := strings.TrimSpace(string(fmtr.Format(r))) 57 return syslogFn(s) 58 }) 59 return LazyHandler(&closingHandler{sysWr, h}), nil 60 } 61 62 func (m muster) SyslogHandler(priority syslog.Priority, tag string, fmtr Format) Handler { 63 return must(SyslogHandler(priority, tag, fmtr)) 64 } 65 66 func (m muster) SyslogNetHandler(net, addr string, priority syslog.Priority, tag string, fmtr Format) Handler { 67 return must(SyslogNetHandler(net, addr, priority, tag, fmtr)) 68 } 69