import { Effect, Layer, Logger, LogLevel, pipe } from "effect"
const customLogger = Logger.make(({ logLevel, message }) => {
globalThis.console.log(`[${logLevel.label}] ${message}`)
})
const mockLogger = (log: (options: Logger.Logger.Options<unknown>) => void) =>
pipe(
Logger.make(log),
(logger) => Logger.replace(customLogger, logger),
Layer.merge(Logger.minimumLogLevel(LogLevel.All))
)
const program = pipe(
Effect.log("something"),
Effect.provide(Logger.replace(Logger.defaultLogger, customLogger))
)
const test = () => {
const logs: string[] = []
const testLogger = mockLogger(({ message }) => logs.push(String(message)))
return program.pipe(
Effect.tap(() => {
console.log({ logs })
}),
Effect.provide(testLogger)
)
}
Effect.runFork(test())
import { Effect, Layer, Logger, LogLevel, pipe } from "effect"
const customLogger = Logger.make(({ logLevel, message }) => {
globalThis.console.log(`[${logLevel.label}] ${message}`)
})
const mockLogger = (log: (options: Logger.Logger.Options<unknown>) => void) =>
pipe(
Logger.make(log),
(logger) => Logger.replace(customLogger, logger),
Layer.merge(Logger.minimumLogLevel(LogLevel.All))
)
const program = pipe(
Effect.log("something"),
Effect.provide(Logger.replace(Logger.defaultLogger, customLogger))
)
const test = () => {
const logs: string[] = []
const testLogger = mockLogger(({ message }) => logs.push(String(message)))
return program.pipe(
Effect.tap(() => {
console.log({ logs })
}),
Effect.provide(testLogger)
)
}
Effect.runFork(test())