From 7086de352ad27148f766e47535e7c18a82b5d564 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20Soul=C3=A9?= Date: Sat, 10 Feb 2018 18:44:57 +0100 Subject: [PATCH] Logrus format: displayed level correctly matches graylog/syslog one MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit following gemnasium/logrus-graylog-hook@4dad8bd Signed-off-by: Maxime Soulé --- format.go | 27 +++++++++++++++---- format_test.go | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+), 5 deletions(-) create mode 100644 format_test.go diff --git a/format.go b/format.go index 11c1d05..cf970af 100644 --- a/format.go +++ b/format.go @@ -24,13 +24,30 @@ var supportedFormat = func() []string { return a }() -// From https://github.com/gemnasium/logrus-graylog-hook/blob/master/graylog_hook.go#L166 -func logrusLevelToString(v int) string { - return logrus.Level(v - 2).String() +var syslogLevelToLogrus = [...]string{ + strings.ToUpper(logrus.PanicLevel.String())[:4], // LOG_EMERG = 0 + strings.ToUpper(logrus.PanicLevel.String())[:4], // LOG_ALERT = 1 + strings.ToUpper(logrus.FatalLevel.String())[:4], // LOG_CRIT = 2 + strings.ToUpper(logrus.ErrorLevel.String())[:4], // LOG_ERR = 3 + strings.ToUpper(logrus.WarnLevel.String())[:4], // LOG_WARNING = 4 + strings.ToUpper(logrus.InfoLevel.String())[:4], // LOG_NOTICE = 5 + strings.ToUpper(logrus.InfoLevel.String())[:4], // LOG_INFO = 6 + strings.ToUpper(logrus.DebugLevel.String())[:4], // LOG_DEBUG = 7 +} + +// String reverse of +// https://github.com/gemnasium/logrus-graylog-hook/blob/master/graylog_hook.go#L144 +func syslogLevelToLogrusString(v int) string { + if v < 0 { + v = 0 + } else if v >= len(syslogLevelToLogrus) { + v = len(syslogLevelToLogrus) - 1 + } + return syslogLevelToLogrus[v] } func logrusFormater(v map[string]interface{}) string { - level := logrusLevelToString(int(v["level"].(float64))) + level := syslogLevelToLogrusString(int(v["level"].(float64))) timestamp := int64(v["timestamp"].(float64)) // Fields @@ -44,7 +61,7 @@ func logrusFormater(v map[string]interface{}) string { // Output b := &bytes.Buffer{} - fmt.Fprintf(b, "%s[%s] %-44s", strings.ToUpper(level)[0:4], time.Unix(timestamp, 0).Format(time.RFC3339), v["short_message"]) + fmt.Fprintf(b, "%s[%s] %-44s", level, time.Unix(timestamp, 0).Format(time.RFC3339), v["short_message"]) for _, k := range keys { fmt.Fprintf(b, ` %s="%v"`, k[1:], v[k]) diff --git a/format_test.go b/format_test.go new file mode 100644 index 0000000..e1c2c71 --- /dev/null +++ b/format_test.go @@ -0,0 +1,73 @@ +package main + +import ( + "strings" + "testing" + + "github.com/sirupsen/logrus" +) + +func TestFormat(t *testing.T) { + const ( + LOG_EMERG = 0 + LOG_ALERT = 1 + LOG_CRIT = 2 + LOG_ERR = 3 + LOG_WARNING = 4 + LOG_NOTICE = 5 + LOG_INFO = 6 + LOG_DEBUG = 7 + ) + + expected := strings.ToUpper(logrus.PanicLevel.String())[:4] + got := syslogLevelToLogrusString(LOG_EMERG) + if got != expected { + t.Errorf("LOG_EMERG: expected `%s', got `%s'", expected, got) + } + expected = strings.ToUpper(logrus.PanicLevel.String())[:4] + got = syslogLevelToLogrusString(LOG_ALERT) + if got != expected { + t.Errorf("LOG_ALERT: expected `%s', got `%s'", expected, got) + } + expected = strings.ToUpper(logrus.FatalLevel.String())[:4] + got = syslogLevelToLogrusString(LOG_CRIT) + if got != expected { + t.Errorf("LOG_CRIT: expected `%s', got `%s'", expected, got) + } + expected = strings.ToUpper(logrus.ErrorLevel.String())[:4] + got = syslogLevelToLogrusString(LOG_ERR) + if got != expected { + t.Errorf("LOG_ERR: expected `%s', got `%s'", expected, got) + } + expected = strings.ToUpper(logrus.WarnLevel.String())[:4] + got = syslogLevelToLogrusString(LOG_WARNING) + if got != expected { + t.Errorf("LOG_WARNING: expected `%s', got `%s'", expected, got) + } + expected = strings.ToUpper(logrus.InfoLevel.String())[:4] + got = syslogLevelToLogrusString(LOG_NOTICE) + if got != expected { + t.Errorf("LOG_NOTICE: expected `%s', got `%s'", expected, got) + } + expected = strings.ToUpper(logrus.InfoLevel.String())[:4] + got = syslogLevelToLogrusString(LOG_INFO) + if got != expected { + t.Errorf("LOG_INFO: expected `%s', got `%s'", expected, got) + } + expected = strings.ToUpper(logrus.DebugLevel.String())[:4] + got = syslogLevelToLogrusString(LOG_DEBUG) + if got != expected { + t.Errorf("LOG_DEBUG: expected `%s', got `%s'", expected, got) + } + + expected = strings.ToUpper(logrus.PanicLevel.String())[:4] + got = syslogLevelToLogrusString(LOG_EMERG - 1) + if got != expected { + t.Errorf("LOG_DEBUG: expected `%s', got `%s'", expected, got) + } +}