rosentry

package module
v0.0.0-...-a6ee939 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 10, 2026 License: Apache-2.0 Imports: 4 Imported by: 0

README

Sentry Plugin

This plugin provides Sentry integration for the ro library, allowing you to log observable events to Sentry for monitoring and debugging.

Features

  • Log observable events (Next, Error, Complete) to Sentry
  • Support for different log levels (Debug, Info, Warning, Error)
  • Structured logging with extra fields
  • Error tracking with stack traces

Usage

Basic Logging
import (
    "github.com/getsentry/sentry-go"
    "github.com/samber/ro"
    "github.com/samber/ro/plugins/observability/sentry"
)

// Initialize Sentry hub
hub := sentry.CurrentHub().Clone()
hub.ConfigureScope(func(scope *sentry.Scope) {
    scope.SetTag("component", "observable")
})

// Log all notifications
observable := ro.Pipe1(
    ro.Just(1, 2, 3, 4, 5),
    rosentry.Log[int](hub, sentry.LevelInfo),
)

subscription := observable.Subscribe(ro.NoopObserver[int]())
defer subscription.Unsubscribe()
Structured Logging
// Initialize Sentry hub
hub := sentry.CurrentHub().Clone()

// Log with structured notification data
observable := ro.Pipe1(
    ro.Just("hello", "world", "golang"),
    rosentry.LogWithNotification[string](hub, sentry.LevelDebug),
)
Error Handling
// Initialize Sentry hub
hub := sentry.CurrentHub().Clone()

// Log including error notifications
observable := ro.Pipe1(
    ro.NewObservable(func(observer ro.Observer[int]) ro.Teardown {
        observer.Next(1)
        observer.Next(2)
        observer.Error(errors.New("something went wrong"))
        return nil
    }),
    rosentry.Log[int](hub, sentry.LevelError),
)

Available Functions

Operators
  • Log[T](hub *sentry.Hub, level sentry.Level) - Logs events with simple message formatting
  • LogWithNotification[T](hub *sentry.Hub, level sentry.Level) - Logs events with structured data

Log Levels

The plugin supports all Sentry log levels:

  • sentry.LevelDebug - Debug information
  • sentry.LevelInfo - General information
  • sentry.LevelWarning - Warning messages
  • sentry.LevelError - Error messages
  • sentry.LevelFatal - Fatal errors

Dependencies

  • github.com/getsentry/sentry-go - Sentry Go SDK
  • github.com/samber/ro - Reactive Observables library

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Log

func Log[T any](logger *sentry.Hub, level sentry.Level) func(ro.Observable[T]) ro.Observable[T]
Example
// Initialize Sentry hub
hub := createStdoutHub()
hub.ConfigureScope(func(scope *sentry.Scope) {
	scope.SetTag("component", "observable")
})

// Log all notifications (Next, Error, Complete)
observable := ro.Pipe1(
	ro.Just(1, 2, 3, 4, 5),
	Log[int](hub, sentry.LevelInfo),
)

subscription := observable.Subscribe(ro.NoopObserver[int]())
defer subscription.Unsubscribe()
Output:

Sentry event: level=info message="ro.Next: 1"
Sentry event: level=info message="ro.Next: 2"
Sentry event: level=info message="ro.Next: 3"
Sentry event: level=info message="ro.Next: 4"
Sentry event: level=info message="ro.Next: 5"
Sentry event: level=info message="ro.Complete"
Example (InPipeline)
// Initialize Sentry hub
hub := createStdoutHub()
hub.ConfigureScope(func(scope *sentry.Scope) {
	scope.SetTag("component", "observable")
})

// Use logging in a complex pipeline
observable := ro.Pipe3(
	ro.Just(1, 2, 3, 4, 5),
	ro.Filter(func(n int) bool { return n%2 == 0 }), // Keep even numbers
	Log[int](hub, sentry.LevelInfo),
	ro.Map(func(n int) string { return fmt.Sprintf("Even: %d", n) }),
)

subscription := observable.Subscribe(ro.NoopObserver[string]())
defer subscription.Unsubscribe()
Output:

Sentry event: level=info message="ro.Next: 2"
Sentry event: level=info message="ro.Next: 4"
Sentry event: level=info message="ro.Complete"
Example (WithContext)
// Initialize Sentry hub
hub := createStdoutHub()
hub.ConfigureScope(func(scope *sentry.Scope) {
	scope.SetTag("component", "observable")
})

// Log with context-aware operations
ctx := context.Background()

observable := ro.Pipe1(
	ro.Just("context", "aware", "logging"),
	LogWithNotification[string](hub, sentry.LevelInfo),
)

subscription := observable.SubscribeWithContext(ctx, ro.NoopObserver[string]())
defer subscription.Unsubscribe()
Output:

Sentry event: level=info message="ro.Next" extra=map[value:context]
Sentry event: level=info message="ro.Next" extra=map[value:aware]
Sentry event: level=info message="ro.Next" extra=map[value:logging]
Sentry event: level=info message="ro.Complete"
Example (WithCustomLevels)
// Initialize Sentry hub
hub := createStdoutHub()
hub.ConfigureScope(func(scope *sentry.Scope) {
	scope.SetTag("component", "observable")
})

// Demonstrate different log levels
observable := ro.Pipe1(
	ro.Just(1, 2, 3, 4, 5),
	Log[int](hub, sentry.LevelWarning),
)

subscription := observable.Subscribe(ro.NoopObserver[int]())
defer subscription.Unsubscribe()
Output:

Sentry event: level=warning message="ro.Next: 1"
Sentry event: level=warning message="ro.Next: 2"
Sentry event: level=warning message="ro.Next: 3"
Sentry event: level=warning message="ro.Next: 4"
Sentry event: level=warning message="ro.Next: 5"
Sentry event: level=warning message="ro.Complete"
Example (WithError)
// Initialize Sentry hub
hub := createStdoutHub()
hub.ConfigureScope(func(scope *sentry.Scope) {
	scope.SetTag("component", "observable")
})

// Log including error notifications
observable := ro.Pipe1(
	ro.NewObservable(func(observer ro.Observer[int]) ro.Teardown {
		observer.Next(1)
		observer.Next(2)
		observer.Error(errors.New("something went wrong"))
		observer.Next(3) // This won't be emitted due to error
		return nil
	}),
	Log[int](hub, sentry.LevelFatal),
)

subscription := observable.Subscribe(ro.NoopObserver[int]())
defer subscription.Unsubscribe()
Output:

Sentry event: level=fatal message="ro.Next: 1"
Sentry event: level=fatal message="ro.Next: 2"
Sentry event: level=fatal message="ro.Error: something went wrong" exception=error

func LogWithNotification

func LogWithNotification[T any](logger *sentry.Hub, level sentry.Level) func(ro.Observable[T]) ro.Observable[T]
Example
// Initialize Sentry hub
hub := createStdoutHub()
hub.ConfigureScope(func(scope *sentry.Scope) {
	scope.SetTag("component", "observable")
})

// Log with structured notification data
observable := ro.Pipe1(
	ro.Just("hello", "world", "golang"),
	LogWithNotification[string](hub, sentry.LevelDebug),
)

subscription := observable.Subscribe(ro.NoopObserver[string]())
defer subscription.Unsubscribe()
Output:

Sentry event: level=debug message="ro.Next" extra=map[value:hello]
Sentry event: level=debug message="ro.Next" extra=map[value:world]
Sentry event: level=debug message="ro.Next" extra=map[value:golang]
Sentry event: level=debug message="ro.Complete"

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL