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

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

Installโ€‹

First, import the sub-package in your project:

go get -u github.com/samber/ro/plugins/observability/logrus
  • Logs with logrus.

    import (
    "github.com/samber/ro"
    rologrus "github.com/samber/ro/plugins/observability/logrus"
    "github.com/sirupsen/logrus"
    )

    logger := logrus.New()
    logger.SetLevel(logrus.InfoLevel)

    obs := ro.Pipe[string, string](
    ro.Just("message 1", "message 2"),
    rologrus.Log[string](logger, logrus.InfoLevel),
    )

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

    // Logs: message 1
    // Logs: message 2
    // Next: message 1
    // Next: message 2
    // Completed
    Prototype:
    func Log[T any](logger *logrus.Logger, level logrus.Level)
  • LogWithNotificationโ€‹

    Logs with logrus with structured fields and notifications.

    import (
    "github.com/samber/ro"
    "github.com/sirupsen/logrus"
    rologrus "github.com/samber/ro/plugins/observability/logrus"
    )

    logger := logrus.New()
    logger.SetLevel(logrus.InfoLevel)

    obs := ro.Pipe[string, string](
    ro.Just("user login", "data processing", "task completed"),
    rologrus.LogWithNotification[string](logger, logrus.InfoLevel),
    )

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

    // Logs: time=... level=INFO msg="ro.Next" value=user login
    // Logs: time=... level=INFO msg="ro.Next" value=data processing
    // Logs: time=... level=INFO msg="ro.Next" value=task completed
    // Next: user login
    // Next: data processing
    // Next: task completed
    // Completed
    Variant:
    Prototype:
    func LogWithNotification[T any](logger *logrus.Logger, level logrus.Level)
  • FatalOnErrorโ€‹

    Fatal logs errors using logrus and terminates the application.

    import (
    "fmt"
    "github.com/samber/ro"
    "github.com/sirupsen/logrus"
    rologrus "github.com/samber/ro/plugins/observability/logrus"
    )

    logger := logrus.New()
    logger.SetLevel(logrus.ErrorLevel)

    obs := ro.Pipe[string, string](
    ro.Just("success", "error occurred"),
    ro.Map[string, string](func(s string) (string, error) {
    if s == "error occurred" {
    return "", fmt.Errorf("processing failed")
    }
    return s, nil
    }),
    rologrus.FatalOnError[string](logger),
    )

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

    // Logs: time=... level=FATAL msg="ro.Error" error=processing failed
    // (Application terminates)
    Prototype:
    func FatalOnError[T any](logger *logrus.Logger)