Documentation ¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func AttachCoreToLogger ¶
Example ¶
package main import ( "fmt" "log" "time" "github.com/getsentry/sentry-go" "go.uber.org/zap" "go.uber.org/zap/zapcore" "go.uber.org/zap/zaptest/observer" "github.com/TheZeroSlave/zapsentry" ) func main() { // Setup zap with observer (for testing), originally we use // config = zap.NewDevelopmentConfig() // logger, err := config.Build() // to build zap logger, here we use zap/zaptest/observer for testing core, recordedLogs := observer.New(zapcore.DebugLevel) logger := zap.New(core, zap.AddStacktrace(zap.DebugLevel)) // Setup mock sentry client for testing, in general we use sentry.NewClient var recordedSentryEvent *sentry.Event sentryClient := mockSentryClient(func(event *sentry.Event) { recordedSentryEvent = event }) // Setup zapsentry core, err := zapsentry.NewCore(zapsentry.Configuration{ Level: zapcore.ErrorLevel, // when to send message to sentry Tags: map[string]string{ "component": "system", }, }, zapsentry.NewSentryClientFromClient(sentryClient)) if err != nil { log.Fatal(err) } newLogger := zapsentry.AttachCoreToLogger(core, logger) // Send error log newLogger.Error("[error] something went wrong!", zap.String("method", "unknown")) // Check output fmt.Println(recordedLogs.All()[0].Message) fmt.Println(recordedSentryEvent.Message) fmt.Println(recordedSentryEvent.Extra) } func mockSentryClient(f func(event *sentry.Event)) *sentry.Client { client, _ := sentry.NewClient(sentry.ClientOptions{ Dsn: "", Transport: &transport{MockSendEvent: f}, }) return client } type transport struct { MockSendEvent func(event *sentry.Event) } // Flush waits until any buffered events are sent to the Sentry server, blocking // for at most the given timeout. It returns false if the timeout was reached. func (f *transport) Flush(_ time.Duration) bool { return true } // Configure is called by the Client itself, providing it it's own ClientOptions. func (f *transport) Configure(_ sentry.ClientOptions) {} // SendEvent assembles a new packet out of Event and sends it to remote server. // We use this method to capture the event for testing func (f *transport) SendEvent(event *sentry.Event) { f.MockSendEvent(event) }
Output: [error] something went wrong! [error] something went wrong! map[method:unknown]
func NewCore ¶
func NewCore(cfg Configuration, factory SentryClientFactory) (zapcore.Core, error)
Types ¶
type ClientGetter ¶ added in v1.0.1
type ClientGetter interface {
GetClient() *sentry.Client
}
type Configuration ¶
type Configuration struct { Tags map[string]string DisableStacktrace bool Level zapcore.Level FlushTimeout time.Duration Hub *sentry.Hub }
Configuration is a minimal set of parameters for Sentry integration.
type SentryClientFactory ¶
type SentryClientFactory func() (*sentry.Client, error)
func NewSentryClientFromClient ¶
func NewSentryClientFromClient(client *sentry.Client) SentryClientFactory
func NewSentryClientFromDSN ¶
func NewSentryClientFromDSN(DSN string) SentryClientFactory
Click to show internal directories.
Click to hide internal directories.