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