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
Example code:
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)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))
)
);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))
)
);