Context.Reference<ReadonlySet<Logger<unknown, any>>>Context reference containing the active loggers for the current fiber.
Details
By default this set includes the default logger and the tracer logger.
Providing Logger.layer replaces or merges with this set depending on its
options.
Example (Accessing current loggers)
import { Effect, Logger } from "effect"
// Access current loggers from fiber context
const program = Effect.gen(function*() {
const currentLoggers = yield* Effect.service(Logger.CurrentLoggers)
console.log(`Number of active loggers: ${currentLoggers.size}`)
// Add a custom logger to the set
const customLogger = Logger.make((options) => {
console.log(`Custom: ${options.message}`)
})
yield* Effect.log("Hello from custom logger").pipe(
Effect.provide(Logger.layer([customLogger]))
)
})export const const CurrentLoggers: Context.Reference<
ReadonlySet<Logger<unknown, any>>
>
const CurrentLoggers: {
key: string;
Service: {
forEach: (callbackfn: (value: Logger<unknown, any>, value2: Logger<unknown, any>, set: ReadonlySet<Logger<unknown, any>>) => void, thisArg?: any) => void;
has: (value: Logger<unknown, any>) => boolean;
size: number;
entries: () => SetIterator<[Logger<unknown, any>, Logger<unknown, any>]>;
keys: () => SetIterator<Logger<unknown, any>>;
values: () => SetIterator<Logger<unknown, any>>;
union: (other: ReadonlySetLike<U>) => Set<Logger<unknown, any> | U>;
intersection: (other: ReadonlySetLike<U>) => Set<Logger<unknown, any> & U>;
difference: (other: ReadonlySetLike<U>) => Set<Logger<unknown, any>>;
symmetricDifference: (other: ReadonlySetLike<U>) => Set<Logger<unknown, any> | U>;
isSubsetOf: (other: ReadonlySetLike<unknown>) => boolean;
isSupersetOf: (other: ReadonlySetLike<unknown>) => boolean;
isDisjointFrom: (other: ReadonlySetLike<unknown>) => boolean;
};
defaultValue: () => Shape;
of: (this: void, self: ReadonlySet<Logger<unknown, any>>) => ReadonlySet<Logger<unknown, any>>;
context: (self: ReadonlySet<Logger<unknown, any>>) => Context.Context<never>;
use: (f: (service: ReadonlySet<Logger<unknown, any>>) => Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
useSync: (f: (service: ReadonlySet<Logger<unknown, any>>) => A) => Effect.Effect<A, never, never>;
Identifier: Identifier;
stack: string | undefined;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
Context reference containing the active loggers for the current fiber.
Details
By default this set includes the default logger and the tracer logger.
Providing Logger.layer replaces or merges with this set depending on its
options.
Example (Accessing current loggers)
import { Effect, Logger } from "effect"
// Access current loggers from fiber context
const program = Effect.gen(function*() {
const currentLoggers = yield* Effect.service(Logger.CurrentLoggers)
console.log(`Number of active loggers: ${currentLoggers.size}`)
// Add a custom logger to the set
const customLogger = Logger.make((options) => {
console.log(`Custom: ${options.message}`)
})
yield* Effect.log("Hello from custom logger").pipe(
Effect.provide(Logger.layer([customLogger]))
)
})
CurrentLoggers: import ContextContext.type Context.Reference = /*unresolved*/ anyReference<interface ReadonlySet<T>ReadonlySet<interface Logger<in Message, out Output>A logger that transforms a runtime log event into an output value.
Details
The runtime calls log with the message, level, cause, fiber, and timestamp
for each log event. Use Logger.layer to install one or more loggers for an
effect.
Example (Creating custom loggers)
import { Effect, Logger } from "effect"
// Create a custom logger that accepts unknown messages and returns void
const stringLogger = Logger.make<unknown, void>((options) => {
console.log(`[${options.logLevel}] ${options.message}`)
})
// Create a logger that accepts any message type and returns a formatted string
const formattedLogger = Logger.make<unknown, string>((options) =>
`${options.date.toISOString()} [${options.logLevel}] ${options.message}`
)
// Use the logger in an Effect program
const program = Effect.log("Hello World").pipe(
Effect.provide(Logger.layer([stringLogger]))
)
Logger<unknown, any>>> = import effecteffect.const CurrentLoggers: Context.Reference<
ReadonlySet<Logger<unknown, any>>
>
const CurrentLoggers: {
key: string;
Service: {
forEach: (callbackfn: (value: Logger<unknown, any>, value2: Logger<unknown, any>, set: ReadonlySet<Logger<unknown, any>>) => void, thisArg?: any) => void;
has: (value: Logger<unknown, any>) => boolean;
size: number;
entries: () => SetIterator<[Logger<unknown, any>, Logger<unknown, any>]>;
keys: () => SetIterator<Logger<unknown, any>>;
values: () => SetIterator<Logger<unknown, any>>;
union: (other: ReadonlySetLike<U>) => Set<Logger<unknown, any> | U>;
intersection: (other: ReadonlySetLike<U>) => Set<Logger<unknown, any> & U>;
difference: (other: ReadonlySetLike<U>) => Set<Logger<unknown, any>>;
symmetricDifference: (other: ReadonlySetLike<U>) => Set<Logger<unknown, any> | U>;
isSubsetOf: (other: ReadonlySetLike<unknown>) => boolean;
isSupersetOf: (other: ReadonlySetLike<unknown>) => boolean;
isDisjointFrom: (other: ReadonlySetLike<unknown>) => boolean;
};
defaultValue: () => Shape;
of: (this: void, self: ReadonlySet<Logger<unknown, any>>) => ReadonlySet<Logger<unknown, any>>;
context: (self: ReadonlySet<Logger<unknown, any>>) => Context.Context<never>;
use: (f: (service: ReadonlySet<Logger<unknown, any>>) => Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
useSync: (f: (service: ReadonlySet<Logger<unknown, any>>) => A) => Effect.Effect<A, never, never>;
Identifier: Identifier;
stack: string | undefined;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
CurrentLoggers