Documentation
¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Log ¶
func Log[T any](logger slog.Logger, level slog.Level) func(ro.Observable[T]) ro.Observable[T]
Example ¶
// Initialize slog logger
buff := bufio.NewWriter(os.Stdout)
logger := slog.New(slog.NewTextHandler(&timeFilterWriter{w: buff}, &slog.HandlerOptions{
Level: slog.LevelInfo,
}))
defer buff.Flush()
// Log all notifications (Next, Error, Complete)
observable := ro.Pipe1(
ro.Just(1, 2, 3, 4, 5),
Log[int](*logger, slog.LevelInfo),
)
subscription := observable.Subscribe(ro.NoopObserver[int]())
defer subscription.Unsubscribe()
Output: level=INFO msg="ro.Next: 1" level=INFO msg="ro.Next: 2" level=INFO msg="ro.Next: 3" level=INFO msg="ro.Next: 4" level=INFO msg="ro.Next: 5" level=INFO msg=ro.Complete
Example (InPipeline) ¶
// Initialize slog logger with mock handler that removes time
buff := bufio.NewWriter(os.Stdout)
logger := slog.New(slog.NewTextHandler(&timeFilterWriter{w: buff}, &slog.HandlerOptions{
Level: slog.LevelInfo,
}))
defer buff.Flush()
// 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](*logger, slog.LevelInfo),
ro.Map(func(n int) string { return fmt.Sprintf("Even: %d", n) }),
)
subscription := observable.Subscribe(ro.NoopObserver[string]())
defer subscription.Unsubscribe()
Output: level=INFO msg="ro.Next: 2" level=INFO msg="ro.Next: 4" level=INFO msg=ro.Complete
Example (WithContext) ¶
// Initialize slog logger with mock handler that removes time
buff := bufio.NewWriter(os.Stdout)
logger := slog.New(slog.NewTextHandler(&timeFilterWriter{w: buff}, &slog.HandlerOptions{
Level: slog.LevelInfo,
}))
defer buff.Flush()
// Log with context-aware operations
ctx := context.Background()
observable := ro.Pipe1(
ro.Just("context", "aware", "logging"),
LogWithNotification[string](*logger, slog.LevelInfo),
)
subscription := observable.SubscribeWithContext(ctx, ro.NoopObserver[string]())
defer subscription.Unsubscribe()
Output: level=INFO msg=ro.Next value=context level=INFO msg=ro.Next value=aware level=INFO msg=ro.Next value=logging level=INFO msg=ro.Complete
Example (WithCustomLevels) ¶
// Initialize slog logger with mock handler that removes time
buff := bufio.NewWriter(os.Stdout)
logger := slog.New(slog.NewTextHandler(&timeFilterWriter{w: buff}, &slog.HandlerOptions{
Level: slog.LevelInfo,
}))
defer buff.Flush()
// Demonstrate different log levels
observable := ro.Pipe1(
ro.Just(1, 2, 3, 4, 5),
Log[int](*logger, slog.LevelWarn),
)
subscription := observable.Subscribe(ro.NoopObserver[int]())
defer subscription.Unsubscribe()
Output: level=WARN msg="ro.Next: 1" level=WARN msg="ro.Next: 2" level=WARN msg="ro.Next: 3" level=WARN msg="ro.Next: 4" level=WARN msg="ro.Next: 5" level=WARN msg=ro.Complete
Example (WithError) ¶
// Initialize slog logger with mock handler that removes time
buff := bufio.NewWriter(os.Stdout)
logger := slog.New(slog.NewTextHandler(&timeFilterWriter{w: buff}, &slog.HandlerOptions{
Level: slog.LevelInfo,
}))
defer buff.Flush()
// 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](*logger, slog.LevelError),
)
subscription := observable.Subscribe(ro.NoopObserver[int]())
defer subscription.Unsubscribe()
Output: level=ERROR msg="ro.Next: 1" level=ERROR msg="ro.Next: 2" level=ERROR msg="ro.Error: something went wrong"
func LogWithNotification ¶
func LogWithNotification[T any](logger slog.Logger, level slog.Level) func(ro.Observable[T]) ro.Observable[T]
Example ¶
// Initialize slog logger with mock handler that removes time
buff := bufio.NewWriter(os.Stdout)
logger := slog.New(slog.NewTextHandler(&timeFilterWriter{w: buff}, &slog.HandlerOptions{
Level: slog.LevelDebug,
}))
defer buff.Flush()
// Log with structured notification data
observable := ro.Pipe1(
ro.Just("hello", "world", "golang"),
LogWithNotification[string](*logger, slog.LevelDebug),
)
subscription := observable.Subscribe(ro.NoopObserver[string]())
defer subscription.Unsubscribe()
Output: level=DEBUG msg=ro.Next value=hello level=DEBUG msg=ro.Next value=world level=DEBUG msg=ro.Next value=golang level=DEBUG msg=ro.Complete
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.