From 659cf17e1074555a5ebc36fb094686a9c11a093f Mon Sep 17 00:00:00 2001 From: Marcus Efraimsson Date: Mon, 4 Apr 2022 12:51:14 +0200 Subject: [PATCH] Logging: Fix syslog messages should be sent with correct severity (#47209) --- pkg/infra/log/level/level.go | 29 +++++++++++++++++++++++++++++ pkg/infra/log/syslog.go | 33 ++++++++++++++------------------- 2 files changed, 43 insertions(+), 19 deletions(-) diff --git a/pkg/infra/log/level/level.go b/pkg/infra/log/level/level.go index dbb23c674ca..cc3ef214491 100644 --- a/pkg/infra/log/level/level.go +++ b/pkg/infra/log/level/level.go @@ -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 diff --git a/pkg/infra/log/syslog.go b/pkg/infra/log/syslog.go index 150a8c6fae3..62564bcf3cf 100644 --- a/pkg/infra/log/syslog.go +++ b/pkg/infra/log/syslog.go @@ -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))