Для вывода 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 и информацию о панике. Вы можете настроить формат записи и сохранять его в файл либо выводить в консоль - это зависит от вашей конкретной настройки.