Logger migration from log15 to gokit/log (#41636)

* migrate log15 to gokit/log

* fix console log

* update some unittest

* fix all unittest

* fix the build

* Update pkg/infra/log/log.go

Co-authored-by: Yuriy Tseretyan <tceretian@gmail.com>

* general type vector

* correct the level key

Co-authored-by: Yuriy Tseretyan <tceretian@gmail.com>
This commit is contained in:
ying-jeanne
2022-01-06 22:28:05 +08:00
committed by GitHub
co-authored by Yuriy Tseretyan
parent 8898a5f0a0
commit a8eef45a44
17 changed files with 628 additions and 321 deletions
+47 -38
View File
@@ -4,11 +4,12 @@
package log
import (
"errors"
"log/syslog"
"os"
"github.com/inconshreveable/log15"
"github.com/go-kit/log"
"github.com/go-kit/log/level"
gokitsyslog "github.com/go-kit/log/syslog"
"gopkg.in/ini.v1"
)
@@ -18,13 +19,41 @@ type SysLogHandler struct {
Address string
Facility string
Tag string
Format log15.Format
Format Formatedlogger
logger log.Logger
}
func NewSyslog(sec *ini.Section, format log15.Format) *SysLogHandler {
handler := &SysLogHandler{
Format: log15.LogfmtFormat(),
var selector = func(keyvals ...interface{}) syslog.Priority {
for i := 0; i < len(keyvals); i += 2 {
if keyvals[i] == level.Key() {
if v, ok := keyvals[i+1].(string); ok {
switch v {
case "emergency":
return syslog.LOG_EMERG
case "alert":
return syslog.LOG_ALERT
case "critical":
return syslog.LOG_CRIT
case "error":
return syslog.LOG_ERR
case "warning":
return syslog.LOG_WARNING
case "notice":
return syslog.LOG_NOTICE
case "info":
return syslog.LOG_INFO
case "debug":
return syslog.LOG_DEBUG
}
return syslog.LOG_LOCAL0
}
}
}
return syslog.LOG_LOCAL0
}
func NewSyslog(sec *ini.Section, format Formatedlogger) *SysLogHandler {
handler := &SysLogHandler{}
handler.Format = format
handler.Network = sec.Key("network").MustString("")
@@ -33,18 +62,16 @@ func NewSyslog(sec *ini.Section, format log15.Format) *SysLogHandler {
handler.Tag = sec.Key("tag").MustString("")
if err := handler.Init(); err != nil {
Root.Error("Failed to init syslog log handler", "error", err)
_ = level.Error(Root).Log("Failed to init syslog log handler", "error", err)
os.Exit(1)
}
handler.logger = gokitsyslog.NewSyslogLogger(handler.syslog, format, gokitsyslog.PrioritySelectorOption(selector))
return handler
}
func (sw *SysLogHandler) Init() error {
prio, err := parseFacility(sw.Facility)
if err != nil {
return err
}
// the facility is the origin of the syslog message
prio := parseFacility(sw.Facility)
w, err := syslog.Dial(sw.Network, sw.Address, prio, sw.Tag)
if err != nil {
@@ -55,26 +82,8 @@ func (sw *SysLogHandler) Init() error {
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")
}
func (sw *SysLogHandler) Log(keyvals ...interface{}) error {
err := sw.logger.Log(keyvals...)
return err
}
@@ -95,11 +104,11 @@ var facilities = map[string]syslog.Priority{
"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")
func parseFacility(facility string) syslog.Priority {
v, found := facilities[facility]
if !found {
// default the facility level to LOG_LOCAL7
return syslog.LOG_LOCAL7
}
return prio, nil
return v
}