Hyperlinkv0.8.0-beta.28

ErrorReporter

ErrorReporter.makeconsteffect/ErrorReporter.ts:119
(
  report: (options: {
    readonly cause: Cause.Cause<unknown>
    readonly error: Error
    readonly attributes: ReadonlyRecord<string, unknown>
    readonly severity: Severity
    readonly fiber: Fiber.Fiber<unknown, unknown>
    readonly timestamp: bigint
  }) => void
): ErrorReporter

Creates an ErrorReporter from a callback.

When to use

Use to define how reported failures are forwarded to a logging, monitoring, or error-tracking backend.

Details

The returned reporter automatically deduplicates causes and individual errors (the same object is never reported twice), skips interruptions, and resolves the ignore, severity, and attributes annotations on each error before invoking your callback.

Example (Forwarding errors to the console)

import { ErrorReporter } from "effect"

// Forward every failure to the console
const consoleReporter = ErrorReporter.make(
  ({ error, severity, attributes }) => {
    console.error(`[${severity}]`, error.message, attributes)
  }
)
constructorslayerreport
export const make = (
  report: (options: {
    readonly cause: Cause.Cause<unknown>
    readonly error: Error
    readonly attributes: ReadonlyRecord<string, unknown>
    readonly severity: Severity
    readonly fiber: Fiber.Fiber<unknown, unknown>
    readonly timestamp: bigint
  }) => void
): ErrorReporter => {
  const reported = new WeakSet<Cause.Cause<unknown> | object>()
  return {
    [TypeId]: TypeId,
    report(options) {
      if (reported.has(options.cause)) return
      reported.add(options.cause)
      for (let i = 0; i < options.cause.reasons.length; i++) {
        const reason = options.cause.reasons[i]
        if (reason._tag === "Interrupt") continue
        const original = reason._tag === "Fail" ? reason.error : reason.defect
        const isObject = typeof original === "object" && original !== null
        if (isObject) {
          if (reported.has(original)) continue
          reported.add(original)
        }
        if (isIgnored(original)) continue
        const pretty = effect.causePrettyError(original as any, reason.annotations)
        report({
          ...options,
          error: pretty,
          severity: isObject ? getSeverity(original) : "Info",
          attributes: isObject ? getAttributes(original) : emptyAttributes
        })
      }
    }
  }
}