Go Fiber 한글 공식 문서
  • 🙇‍♀️안녕하세요
  • 🏠Home
    • 👋Welcome
    • 📁API
      • 📦Fiber
      • 🚀App
      • 🧠Ctx
      • 📋Constants
      • 🌎Client
      • 📃Log
      • 🧬Middleware
        • Adaptor
        • BasicAuth
        • Cache
        • Compress
        • CORS
        • CSRF
        • EarlyData
        • Encrypt Cookie
        • EnvVar
        • ETag
        • ExpVar
        • Favicon
        • FileSystem
        • Health Check
        • Helmet
        • Idempotency
        • Keyauth
        • Limiter
        • Logger
        • Monitor
        • Pprof
        • Proxy
        • Recover
        • Redirect
        • RequestID
        • Rewrite
        • Session
        • Skip
        • Timeout
    • 📁Guide
      • 🔌Routing
      • 🎭Grouping
      • 📝Templates
      • 🐛Error Handling
      • 🔎Validation
      • 🎣Hooks
      • ⚡Make Fiber Faster
    • 📁Extra
      • 🤔FAQ
      • 📊Benchmarks
  • 🧩Extra
    • 🧬Contrip
      • 👋Welcome
      • Casbin
      • Fgprof
      • Fiberi18n
      • Fibernewrelic
      • Fibersentry
      • Fiberzap
      • Fiberzerolog
      • JWT
      • LoadShed
      • Opafiber
      • Otelfiber
        • Example
      • Paseto
      • README
      • Swagger
      • Websocket
    • 📦Storage
      • 👋Welcome
      • ArangoDB
      • Azure Blob
      • Badger
      • Bbolt
      • Coherence
      • Couchbase
      • DynamoDB
      • Etcd
      • Memcache
      • Memory
      • Minio
      • MongoDB
      • MSSQL
      • MySQL
      • Nats
      • Pebble
      • Postgres
      • Redis
      • Ristretto
      • Rueidis
      • S3
      • ScyllaDb
      • SQLite3
    • 📃Template
      • 👋Welcome
      • Ace
      • Amber
      • Django
      • Handlebars
      • HTML
        • Golang Templates Cheatsheet
      • Jet
      • Mustache
      • Pug
      • Slim
Powered by GitBook
On this page
  • Installation
  • Signatures
  • Config
  • Examples
  • BeforeSend 콜백에서 컨텍스트 액세스하기
  1. Extra
  2. Contrip

Fibersentry

PreviousFibernewrelicNextFiberzap

Last updated 1 year ago


Fiber용 지원 라이브러리입니다.

참고: Go 1.18 이상이 필요합니다

Installation

이 미들웨어는 Fiber v2를 지원합니다.

go get -u github.com/gofiber/fiber/v2
go get -u github.com/gofiber/contrib/fibersentry  
go get -u github.com/getsentry/sentry-go

Signatures

fibersentry.New(config ...fibersentry.Config) fiber.Handler

Config

속성
타입
설명
기본값

Repanic

bool

false

WaitForDelivery

bool

false

Timeout

time.Duration

이벤트 전송 요청에 대한 시간 제한입니다.

time.Second * 2

Examples

fibersentry는 *sentry.Hub 인스턴스(https://godoc.org/github.com/getsentry/sentry-go#Hub)를 요청의 컨텍스트에 연결하여 요청의 나머지 수명 동안 사용할 수 있도록 합니다. fibersentry.GetHubFromContext() 메서드를 사용하여 이어지는 모든 미들웨어 및 경로에서 컨텍스트 자체에 액세스할 수 있습니다. 그리고 전역 sentry.CaptureMessage, sentry.CaptureException 또는 기타 호출 대신 사용해야 합니다. 요청 간의 데이터 분리를 유지하기 때문입니다.

fibersentry 이전에 연결된 미들웨어에서는 *sentry.Hub를 사용할 수 없습니다!

package main

import (
	"fmt"
	"log"

	"github.com/getsentry/sentry-go"
	"github.com/gofiber/contrib/fibersentry"
	"github.com/gofiber/fiber/v2"
	"github.com/gofiber/fiber/v2/utils"
)

func main() {
	_ = sentry.Init(sentry.ClientOptions{
		Dsn: "",
		BeforeSend: func(event *sentry.Event, hint *sentry.EventHint) *sentry.Event {
			if hint.Context != nil {
				if c, ok := hint.Context.Value(sentry.RequestContextKey).(*fiber.Ctx); ok {
					// 패닉이 발생했을 때 원래의 컨텍스트에 액세스할 수 있습니다
					fmt.Println(utils.ImmutableString(c.Hostname()))
				}
			}
			fmt.Println(event)
			return event
		},
		Debug:            true,
		AttachStacktrace: true,
	})

	app := fiber.New()

	app.Use(fibersentry.New(fibersentry.Config{
		Repanic:         true,
		WaitForDelivery: true,
	}))

	enhanceSentryEvent := func(c *fiber.Ctx) error {
		if hub := fibersentry.GetHubFromContext(c); hub != nil {
			hub.Scope().SetTag("someRandomTag", "maybeYouNeedIt")
		}
		return c.Next()
	}

	app.All("/foo", enhanceSentryEvent, func(c *fiber.Ctx) error {
		panic("왜 그럴까")  
	})

	app.All("/", func(c *fiber.Ctx) error {
		if hub := fibersentry.GetHubFromContext(c); hub != nil {
			hub.WithScope(func(scope *sentry.Scope) {
				scope.SetExtra("unwantedQuery", "someQueryDataMaybe")
				hub.CaptureMessage("사용자가 원치 않는 쿼리 문자열을 제공했지만 정상적으로 복구되었습니다")
			})
		}
		return c.SendStatus(fiber.StatusOK)
	})

	log.Fatal(app.Listen(":3000"))
}

BeforeSend 콜백에서 컨텍스트 액세스하기

sentry.Init(sentry.ClientOptions{
	Dsn: "your-public-dsn",  
	BeforeSend: func(event *sentry.Event, hint *sentry.EventHint) *sentry.Event {
		if hint.Context != nil {
			if c, ok := hint.Context.Value(sentry.RequestContextKey).(*fiber.Ctx); ok {
				// 패닉이 발생했을 때 원래의 컨텍스트에 액세스할 수 있습니다
				fmt.Println(c.Hostname())
			}
		}
		return event
	},
})

Repanic은 복구 후 Sentry가 패닉을 다시 발생시켜야 하는지 여부를 설정합니다. 미들웨어를 사용하는 경우 true로 설정하세요.

WaitForDelivery는 응답을 진행하기 전에 요청을 차단할 것인지를 설정합니다. 미들웨어를 사용하는 경우 이 옵션을 건너뛰거나 false로 설정해도 안전합니다.

🧩
🧬
Recover
Recover
Sentry