Context.Reference<Severity>Context reference for the current log severity used by Effect.log when no explicit
level is provided.
When to use
Use to set the default severity for Effect.log entries that do not provide
an explicit level.
Details
Use MinimumLogLevel to control which log entries are filtered out.
Example (Changing the current log level)
import { Console, Effect, References } from "effect"
const dynamicLogging = Effect.gen(function*() {
// Get current log level (default is "Info")
const current = yield* References.CurrentLogLevel
console.log(current) // "Info"
// Set log level to Debug for detailed logging
yield* Effect.provideService(
Effect.gen(function*() {
const level = yield* References.CurrentLogLevel
console.log(level) // "Debug"
yield* Console.debug("This debug message will be shown")
}),
References.CurrentLogLevel,
"Debug"
)
// Change to Error level to reduce noise
yield* Effect.provideService(
Effect.gen(function*() {
const level = yield* References.CurrentLogLevel
console.log(level) // "Error"
yield* Console.info("This info message will be filtered out")
yield* Console.error("This error message will be shown")
}),
References.CurrentLogLevel,
"Error"
)
})export const const CurrentLogLevel: Context.Reference<Severity>const CurrentLogLevel: {
defaultValue: () => Shape;
of: (this: void, self: Severity) => Severity;
context: (self: Severity) => Context.Context<never>;
use: (f: (service: Severity) => Effect<A, E, R>) => Effect<A, E, R>;
useSync: (f: (service: Severity) => A) => Effect<A, never, never>;
Identifier: Identifier;
Service: Shape;
key: string;
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 for the current log severity used by Effect.log when no explicit
level is provided.
When to use
Use to set the default severity for Effect.log entries that do not provide
an explicit level.
Details
Use MinimumLogLevel to control which log entries are filtered out.
Example (Changing the current log level)
import { Console, Effect, References } from "effect"
const dynamicLogging = Effect.gen(function*() {
// Get current log level (default is "Info")
const current = yield* References.CurrentLogLevel
console.log(current) // "Info"
// Set log level to Debug for detailed logging
yield* Effect.provideService(
Effect.gen(function*() {
const level = yield* References.CurrentLogLevel
console.log(level) // "Debug"
yield* Console.debug("This debug message will be shown")
}),
References.CurrentLogLevel,
"Debug"
)
// Change to Error level to reduce noise
yield* Effect.provideService(
Effect.gen(function*() {
const level = yield* References.CurrentLogLevel
console.log(level) // "Error"
yield* Console.info("This info message will be filtered out")
yield* Console.error("This error message will be shown")
}),
References.CurrentLogLevel,
"Error"
)
})
CurrentLogLevel: import ContextContext.interface Reference<in out Shape>Service key with a lazily computed default value.
Details
When a Reference is requested from a Context that does not contain an
override, Context getters that resolve references return the cached default
value instead of failing.
Example (Defining a reference with a default value)
import { Context } from "effect"
// Define a reference with a default value
const LoggerRef: Context.Reference<{ log: (msg: string) => void }> =
Context.Reference("Logger", {
defaultValue: () => ({ log: (msg: string) => console.log(msg) })
})
// The reference can be used without explicit provision
const context = Context.empty()
const logger = Context.get(context, LoggerRef) // Uses default value
Creates a context key with a default value.
When to use
Use when you need to define a context key with a lazily computed default
value.
Details
Context.Reference allows you to create a key that can hold a value. You
can provide a default value for the service, which will automatically be used
when the context is accessed, or override it with a custom implementation
when needed. The default value is computed lazily and cached on the
reference.
Example (Creating references with default values)
import { Context } from "effect"
// Create a reference with a default value
const LoggerRef = Context.Reference("Logger", {
defaultValue: () => ({ log: (msg: string) => console.log(msg) })
})
// The reference provides the default value when accessed from an empty context
const context = Context.empty()
const logger = Context.get(context, LoggerRef)
// You can also override the default value
const customContext = Context.make(LoggerRef, {
log: (msg: string) => `Custom: ${msg}`
})
const customLogger = Context.get(customContext, LoggerRef)
Reference<type Severity = "Fatal" | "Error" | "Warn" | "Info" | "Debug" | "Trace"Log levels that represent actual message severities, excluding the All and
None sentinel levels.
When to use
Use when typing emitted log message severities, such as explicit log calls,
current log level references, or error-report severity annotations, where
All and None are not valid values.
Severity> = import referencesreferences.const CurrentLogLevel: Context.Reference<Severity>const CurrentLogLevel: {
defaultValue: () => Shape;
of: (this: void, self: Severity) => Severity;
context: (self: Severity) => Context.Context<never>;
use: (f: (service: Severity) => Effect<A, E, R>) => Effect<A, E, R>;
useSync: (f: (service: Severity) => A) => Effect<A, never, never>;
Identifier: Identifier;
Service: Shape;
key: string;
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;
}
CurrentLogLevel