Passing Logger Configuration from Root to Child Effect

Hi 👋 First-time poster here

Looking for a nice way to pass the Logger set up by a root effect to a child effect that is run using Effect.runPromise(childEffect) any suggestions?

Example code:
const processMessage = payload => Effect.gen(function* () {
  yield* Effect.logInfo(`message id: ${payload.id}`);
  // ... more processing with Effects ...
}).pipe(
  // I'd like to avoid passing Logger.pretty & minimumLogLevel again
  // Without this, `processMessage` will use the default logger
  Effect.provide(Logger.pretty),
  Effect.provide(Logger.minimumLogLevel(LogLevel.Debug))
);

const program = Effect.gen(function* () {
  yield* Effect.logInfo('starting...');
  yield* Effect.promise(() => some3rdPartyLibraryThatPullsMessages.run({ 
    eachMessage: (payload) => Effect.runPromise(processMessage(payload)),
    // I'd like eachMessage to pick up the Logger of the `program` Effect
  }));
});

await Effect.runPromise(
  program.pipe(
    Effect.provide(Logger.pretty),
    Effect.provide(Logger.minimumLogLevel(LogLevel.Debug))
  )
);
Was this page helpful?