Skip to main content
Help improve this documentation

This documentation is still new and evolving. If you spot any mistakes, unclear explanations, or missing details, please open an issue.

Your feedback helps us improve!

Logger/Zap operatorsโ€‹

This page lists all operators available in the observability/zap sub-package of ro.

Installโ€‹

First, import the sub-package in your project:

go get -u github.com/samber/ro/plugins/observability/zap
  • Logs all observable notifications (Next, Error, Complete) using zap logger with formatted messages.

    import (
    "github.com/samber/ro"
    rozap "github.com/samber/ro/plugin/logger-zap"
    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
    )

    logger, _ := zap.NewDevelopment()
    obs := ro.Pipe[int, int](
    ro.Just(1, 2, 3, 4, 5),
    rozap.Log[int](logger, zapcore.InfoLevel),
    )

    sub := obs.Subscribe(ro.NoopObserver[int]())
    defer sub.Unsubscribe()

    // zap logs with formatted messages
    // INFO ro.Next: 1
    // INFO ro.Next: 2
    // INFO ro.Next: 3
    // INFO ro.Next: 4
    // INFO ro.Next: 5
    // INFO ro.Complete
    Prototype:
    func Log[T any](logger *zap.Logger, level zapcore.Level)
  • LogWithNotificationโ€‹

    Logs all observable notifications using zap logger with structured notification data.

    import (
    "github.com/samber/ro"
    rozap "github.com/samber/ro/plugin/logger-zap"
    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
    )

    logger, _ := zap.NewDevelopment()
    obs := ro.Pipe[string, string](
    ro.Just("hello", "world", "golang"),
    rozap.LogWithNotification[string](logger, zapcore.DebugLevel),
    )

    sub := obs.Subscribe(ro.NoopObserver[string]())
    defer sub.Unsubscribe()

    // zap logs with structured data
    // DEBUG ro.Next {"value": "hello"}
    // DEBUG ro.Next {"value": "world"}
    // DEBUG ro.Next {"value": "golang"}
    // DEBUG ro.Complete
    Prototype:
    func LogWithNotification[T any](logger *zap.Logger, level zapcore.Level)
  • FatalOnErrorโ€‹

    Terminates the program with a fatal error when an observable error notification occurs using zap logger.

    import (
    "github.com/samber/ro"
    rozap "github.com/samber/ro/plugin/logger-zap"
    "go.uber.org/zap"
    )

    logger, _ := zap.NewDevelopment()
    obs := ro.Pipe[string, string](
    ro.Throw[string](errors.New("critical error")),
    rozap.FatalOnError[string](logger),
    )

    sub := obs.Subscribe(ro.NoopObserver[string]())
    defer sub.Unsubscribe()

    // program terminates with fatal log
    // FATAL ro.Error {"error": "critical error"}
    Prototype:
    func FatalOnError[T any](logger *zap.Logger)