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