Как вывести stacktrace в zerolog + fiber middleware?

Для вывода stacktrace с использованием zerolog и fiber middleware вам потребуется несколько шагов.

1. Сначала установите необходимые пакеты github.com/rs/zerolog и github.com/gofiber/fiber.

2. Импортируйте эти пакеты в своем файле Go:

import (
	"fmt"
	"github.com/gofiber/fiber"
	"github.com/rs/zerolog"
	"github.com/rs/zerolog/log"
)

3. Создайте инстанс zerolog и настройте его для вывода stacktrace. Вы можете указать уровень журналирования, но кроме того добавьте "errorStackMarshaler": "github.com/rs/zerolog/pkgerrors.MarshalStack", чтобы получить stacktrace.

func main() {
	zerolog.ErrorStackMarshaler = pkgerrors.MarshalStack
	zerolog.SetGlobalLevel(zerolog.DebugLevel)
	log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})
}

4. Теперь вы можете использовать zerolog в своем fiber middleware. Создайте функцию middleware, которая будет обрабатывать ошибки, и настраивайте logger для записи stacktrace.

func LogErrors() fiber.Handler {
	return func(c *fiber.Ctx) (err error) {
		defer func() {
			if r := recover(); r != nil {
				stack := pkgerrors.Wrap(r, "")
				log.Error().Stack().Err(stack).Msgf("Recovered panic: %vn%+v", r, stack)
				err = c.SendStatus(fiber.StatusInternalServerError)
			}
		}()
		return c.Next()
	}
}

5. Зарегистрируйте middleware в вашем приложении fiber:

func main() {
	app := fiber.New()
	app.Use(LogErrors())
	// ... Другий middleware и роутинг
	app.Listen(3000)
}

Теперь при возникновении паники в вашем приложении, zerolog будет записывать stacktrace и информацию о панике. Вы можете настроить формат записи и сохранять его в файл либо выводить в консоль - это зависит от вашей конкретной настройки.