Logging: Fix syslog messages should be sent with correct severity (#47209)

This commit is contained in:
Marcus Efraimsson 2022-04-04 12:51:14 +02:00 committed by GitHub
parent 8f1b208a35
commit 659cf17e10
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 19 deletions

View File

@ -205,6 +205,35 @@ const (
levelError
)
func IsKey(v interface{}) bool {
return v != nil && (v == Key() || v == gokitlevel.Key())
}
func GetValue(v interface{}) Value {
if v == nil {
return nil
}
if val, ok := v.(Value); ok {
return val
}
if val, ok := v.(gokitlevel.Value); ok {
switch val {
case gokitlevel.InfoValue():
return InfoValue()
case gokitlevel.WarnValue():
return WarnValue()
case gokitlevel.ErrorValue():
return ErrorValue()
case gokitlevel.DebugValue():
return DebugValue()
}
}
return nil
}
type levelValue struct {
name string
level

View File

@ -8,8 +8,8 @@ import (
"os"
"github.com/go-kit/log"
"github.com/go-kit/log/level"
gokitsyslog "github.com/go-kit/log/syslog"
"github.com/grafana/grafana/pkg/infra/log/level"
"gopkg.in/ini.v1"
)
@ -25,31 +25,26 @@ type SysLogHandler struct {
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":
if level.IsKey(keyvals[i]) {
val := level.GetValue(keyvals[i+1])
if val != nil {
switch val {
case level.ErrorValue():
return syslog.LOG_ERR
case "warning":
case level.WarnValue():
return syslog.LOG_WARNING
case "notice":
return syslog.LOG_NOTICE
case "info":
case level.InfoValue():
return syslog.LOG_INFO
case "debug":
case level.DebugValue():
return syslog.LOG_DEBUG
}
return syslog.LOG_LOCAL0
}
break
}
}
return syslog.LOG_LOCAL0
return syslog.LOG_INFO
}
func NewSyslog(sec *ini.Section, format Formatedlogger) *SysLogHandler {
@ -62,7 +57,7 @@ func NewSyslog(sec *ini.Section, format Formatedlogger) *SysLogHandler {
handler.Tag = sec.Key("tag").MustString("")
if err := handler.Init(); err != nil {
_ = level.Error(root).Log("Failed to init syslog log handler", "error", err)
root.Error("Failed to init syslog log handler", "error", err)
os.Exit(1)
}
handler.logger = gokitsyslog.NewSyslogLogger(handler.syslog, format, gokitsyslog.PrioritySelectorOption(selector))