Hyperlinkv0.8.0-beta.28

Effect

Effect.annotateLogsconsteffect/Effect.ts:14037
(key: string, value: unknown): <A, E, R>(
  effect: Effect<A, E, R>
) => Effect<A, E, R>
(values: Record<string, unknown>): <A, E, R>(
  effect: Effect<A, E, R>
) => Effect<A, E, R>
<A, E, R>(effect: Effect<A, E, R>, key: string, value: unknown): Effect<
  A,
  E,
  R
>
<A, E, R>(
  effect: Effect<A, E, R>,
  values: Record<string, unknown>
): Effect<A, E, R>

Adds an annotation to each log line in this effect.

Example (Adding log annotations)

import { Effect } from "effect"

const program = Effect.gen(function*() {
  yield* Effect.log("Starting operation")
  yield* Effect.log("Processing data")
  yield* Effect.log("Operation completed")
})

// Add annotations to all log messages
const annotatedProgram = Effect.annotateLogs(program, {
  userId: "user123",
  operation: "data-processing"
})

// Also supports single key-value annotations
const singleAnnotated = Effect.annotateLogs(program, "requestId", "req-456")

Effect.runPromise(annotatedProgram)
// All log messages will include the userId and operation annotations
logging
Source effect/Effect.ts:1403737 lines
export const annotateLogs = dual<
  {
    (
      key: string,
      value: unknown
    ): <A, E, R>(effect: Effect<A, E, R>) => Effect<A, E, R>
    (
      values: Record<string, unknown>
    ): <A, E, R>(effect: Effect<A, E, R>) => Effect<A, E, R>
  },
  {
    <A, E, R>(
      effect: Effect<A, E, R>,
      key: string,
      value: unknown
    ): Effect<A, E, R>
    <A, E, R>(
      effect: Effect<A, E, R>,
      values: Record<string, unknown>
    ): Effect<A, E, R>
  }
>(
  (args) => isEffect(args[0]),
  <A, E, R>(
    effect: Effect<A, E, R>,
    ...args: [Record<string, unknown>] | [key: string, value: unknown]
  ): Effect<A, E, R> =>
    internal.updateService(effect, CurrentLogAnnotations, (annotations) => {
      const newAnnotations = { ...annotations }
      if (args.length === 1) {
        Object.assign(newAnnotations, args[0])
      } else {
        newAnnotations[args[0]] = args[1]
      }
      return newAnnotations
    })
)
Referenced by 1 symbols