From 0a7901da9f5a0f7e36ede8b2057c0ce1e5daa063 Mon Sep 17 00:00:00 2001 From: kaiyou <dev@kaiyou.fr> Date: Fri, 25 Nov 2022 12:50:13 +0100 Subject: [PATCH] Do not show logrus stacktraces --- cmd/hepto/logs.go | 39 +++++++++++++-------------------------- 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/cmd/hepto/logs.go b/cmd/hepto/logs.go index b6fd714..2de7dc4 100644 --- a/cmd/hepto/logs.go +++ b/cmd/hepto/logs.go @@ -2,7 +2,6 @@ package hepto import ( "io/ioutil" - "runtime" "github.com/sirupsen/logrus" "go.uber.org/zap" @@ -11,6 +10,10 @@ import ( // Much of the following code is copied from https://github.com/Sytten/logrus-zap-hook +var levelMap = map[logrus.Level]zapcore.Level{ + logrus.PanicLevel: zapcore.PanicLevel, +} + func NewLogger(logLevel int) (*zap.Logger, error) { // Create the logger logConfig := zap.NewProductionConfig() @@ -21,15 +24,17 @@ func NewLogger(logLevel int) (*zap.Logger, error) { if err != nil { return nil, err } - // Intercept logrus logs - hook := &ZapHook{logger} + // Intercept logrus logs (7 is the magic number of stack frames + // in logrus hook infrastructures) + hookLogger := logger.WithOptions(zap.AddCallerSkip(7)) + hook := &ZapHook{hookLogger} logrus.SetOutput(ioutil.Discard) logrus.StandardLogger().Hooks.Add(hook) return logger, nil } type ZapHook struct { - Logger *zap.Logger + *zap.Logger } func (hook *ZapHook) Fire(entry *logrus.Entry) error { @@ -41,32 +46,14 @@ func (hook *ZapHook) Fire(entry *logrus.Entry) error { fields = append(fields, zap.Any(key, value)) } } - switch entry.Level { - case logrus.PanicLevel: - hook.Write(zapcore.PanicLevel, entry.Message, fields, entry.Caller) - case logrus.FatalLevel: - hook.Write(zapcore.FatalLevel, entry.Message, fields, entry.Caller) - case logrus.ErrorLevel: - hook.Write(zapcore.ErrorLevel, entry.Message, fields, entry.Caller) - case logrus.WarnLevel: - hook.Write(zapcore.WarnLevel, entry.Message, fields, entry.Caller) - case logrus.InfoLevel: - hook.Write(zapcore.InfoLevel, entry.Message, fields, entry.Caller) - case logrus.DebugLevel, logrus.TraceLevel: - hook.Write(zapcore.DebugLevel, entry.Message, fields, entry.Caller) + level, ok := levelMap[entry.Level] + if !ok { + level = zapcore.InfoLevel } + hook.Logger.Log(level, entry.Message, fields...) return nil } -func (hook *ZapHook) Write(lvl zapcore.Level, msg string, fields []zap.Field, caller *runtime.Frame) { - if ce := hook.Logger.Check(lvl, msg); ce != nil { - if caller != nil { - ce.Caller = zapcore.NewEntryCaller(caller.PC, caller.File, caller.Line, caller.PC != 0) - } - ce.Write(fields...) - } -} - func (hook *ZapHook) Levels() []logrus.Level { return logrus.AllLevels } -- GitLab