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/Zerolog operatorsโ€‹

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

Installโ€‹

First, import the sub-package in your project:

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

    import (
    "github.com/samber/ro"
    rozerolog "github.com/samber/ro/plugin/logger-zerolog"
    "github.com/rs/zerolog"
    )

    logger := zerolog.New(os.Stdout).With().Logger()
    obs := ro.Pipe[int, int](
    ro.Just(1, 2, 3, 4, 5),
    rozerolog.Log[int](&logger, zerolog.InfoLevel),
    )

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

    // JSON logs with formatted messages
    // {"level":"info","message":"ro.Next: 1"}
    // {"level":"info","message":"ro.Next: 2"}
    // {"level":"info","message":"ro.Next: 3"}
    // {"level":"info","message":"ro.Next: 4"}
    // {"level":"info","message":"ro.Next: 5"}
    // {"level":"info","message":"ro.Complete"}
    Prototype:
    func Log[T any](logger *zerolog.Logger, level zerolog.Level)
  • LogWithNotificationโ€‹

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

    import (
    "github.com/samber/ro"
    rozerolog "github.com/samber/ro/plugin/logger-zerolog"
    "github.com/rs/zerolog"
    )

    logger := zerolog.New(os.Stdout).With().Logger()
    obs := ro.Pipe[string, string](
    ro.Just("hello", "world", "golang"),
    rozerolog.LogWithNotification[string](&logger, zerolog.DebugLevel),
    )

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

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

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

    import (
    "github.com/samber/ro"
    rozerolog "github.com/samber/ro/plugin/logger-zerolog"
    "github.com/rs/zerolog"
    )

    logger := zerolog.New(os.Stdout).With().Logger()
    obs := ro.Pipe[string, string](
    ro.Throw[string](errors.New("critical error")),
    rozerolog.FatalOnError[string](&logger),
    )

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

    // program terminates with fatal JSON log
    // {"level":"fatal","error":"critical error","message":"ro.Error"}
    Prototype:
    func FatalOnError[T any](logger *zerolog.Logger)