Context.Reference<
ReadonlyArray<[label: string, timestamp: number]>
>Context reference for managing log spans that track the duration and hierarchy of operations. Each span represents a labeled time period for performance analysis and debugging.
When to use
Use to carry the active log span stack that should be included with log entries in the current context.
Example (Tracking log spans)
import { Console, Effect, References } from "effect"
const logSpanExample = Effect.gen(function*() {
// Get current spans (empty by default)
const current = yield* References.CurrentLogSpans
console.log(current.length) // 0
// Add a log span manually
const databaseConnectionStartedAt = 0
yield* Effect.provideService(
Effect.gen(function*() {
// Simulate some work
yield* Effect.sleep("100 millis")
yield* Console.log("Database operation in progress")
const spans = yield* References.CurrentLogSpans
console.log("Active spans:", spans.map(([label]) => label)) // ["database-connection"]
}),
References.CurrentLogSpans,
[["database-connection", databaseConnectionStartedAt]]
)
// Add another span
const dataProcessingStartedAt = 100
yield* Effect.provideService(
Effect.gen(function*() {
const spans = yield* References.CurrentLogSpans
console.log("Active spans:", spans.map(([label]) => label)) // ["database-connection", "data-processing"]
yield* Console.log("Multiple operations in progress")
}),
References.CurrentLogSpans,
[
["database-connection", databaseConnectionStartedAt],
["data-processing", dataProcessingStartedAt]
]
)
// Clear spans when operations complete
yield* Effect.provideService(
Effect.gen(function*() {
const spans = yield* References.CurrentLogSpans
console.log("Active spans:", spans.length) // 0
}),
References.CurrentLogSpans,
[]
)
})references
Source effect/References.ts:3542 lines
export const const CurrentLogSpans: Context.Reference<
ReadonlyArray<
[label: string, timestamp: number]
>
>
const CurrentLogSpans: {
key: string;
Service: {
length: number;
toString: () => string;
toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string };
concat: { (...items: Array<ConcatArray<[label: string, timestamp: number]>>): Array<[label: string, timestamp: number]>; (...items: Array<[label: string, timestamp: number] | ConcatArray<[label: string, timestamp: number]>>): Array<[label: string,…;
join: (separator?: string) => string;
slice: (start?: number, end?: number) => Array<[label: string, timestamp: number]>;
indexOf: (searchElement: [label: string, timestamp: number], fromIndex?: number) => number;
lastIndexOf: (searchElement: [label: string, timestamp: number], fromIndex?: number) => number;
every: { (predicate: (value: [label: string, timestamp: number], index: number, array: ReadonlyArray<[label: string, timestamp: number]>) => value is S, thisArg?: any): this is readonly S[]; (predicate: (value: [label: string, timestamp: number],…;
some: (predicate: (value: [label: string, timestamp: number], index: number, array: ReadonlyArray<[label: string, timestamp: number]>) => unknown, thisArg?: any) => boolean;
forEach: (callbackfn: (value: [label: string, timestamp: number], index: number, array: ReadonlyArray<[label: string, timestamp: number]>) => void, thisArg?: any) => void;
map: (callbackfn: (value: [label: string, timestamp: number], index: number, array: ReadonlyArray<[label: string, timestamp: number]>) => U, thisArg?: any) => Array<U>;
filter: { (predicate: (value: [label: string, timestamp: number], index: number, array: ReadonlyArray<[label: string, timestamp: number]>) => value is S, thisArg?: any): Array<S>; (predicate: (value: [label: string, timestamp: number], index: numb…;
reduce: { (callbackfn: (previousValue: [label: string, timestamp: number], currentValue: [label: string, timestamp: number], currentIndex: number, array: ReadonlyArray<[label: string, timestamp: number]>) => [label: string, timestamp: number]): [l…;
reduceRight: { (callbackfn: (previousValue: [label: string, timestamp: number], currentValue: [label: string, timestamp: number], currentIndex: number, array: ReadonlyArray<[label: string, timestamp: number]>) => [label: string, timestamp: number]): [l…;
find: { (predicate: (value: [label: string, timestamp: number], index: number, obj: ReadonlyArray<[label: string, timestamp: number]>) => value is S, thisArg?: any): S | undefined; (predicate: (value: [label: string, timestamp: number], index: n…;
findIndex: (predicate: (value: [label: string, timestamp: number], index: number, obj: ReadonlyArray<[label: string, timestamp: number]>) => unknown, thisArg?: any) => number;
entries: () => ArrayIterator<[number, [label: string, timestamp: number]]>;
keys: () => ArrayIterator<number>;
values: () => ArrayIterator<[label: string, timestamp: number]>;
includes: (searchElement: [label: string, timestamp: number], fromIndex?: number) => boolean;
flatMap: (callback: (this: This, value: [label: string, timestamp: number], index: number, array: Array<[label: string, timestamp: number]>) => U | ReadonlyArray<U>, thisArg?: This | undefined) => Array<U>;
flat: (this: A, depth?: D | undefined) => Array<FlatArray<A, D>>;
at: (index: number) => [label: string, timestamp: number] | undefined;
findLast: { (predicate: (value: [label: string, timestamp: number], index: number, array: ReadonlyArray<[label: string, timestamp: number]>) => value is S, thisArg?: any): S | undefined; (predicate: (value: [label: string, timestamp: number], index:…;
findLastIndex: (predicate: (value: [label: string, timestamp: number], index: number, array: ReadonlyArray<[label: string, timestamp: number]>) => unknown, thisArg?: any) => number;
toReversed: () => Array<[label: string, timestamp: number]>;
toSorted: (compareFn?: ((a: [label: string, timestamp: number], b: [label: string, timestamp: number]) => number) | undefined) => Array<[label: string, timestamp: number]>;
toSpliced: { (start: number, deleteCount: number, ...items: Array<[label: string, timestamp: number]>): Array<[label: string, timestamp: number]>; (start: number, deleteCount?: number): Array<[label: string, timestamp: number]> };
with: (index: number, value: [label: string, timestamp: number]) => Array<[label: string, timestamp: number]>;
};
defaultValue: () => Shape;
of: (this: void, self: ReadonlyArray<[label: string, timestamp: number]>) => ReadonlyArray<[label: string, timestamp: number]>;
context: (self: ReadonlyArray<[label: string, timestamp: number]>) => Context.Context<never>;
use: (f: (service: ReadonlyArray<[label: string, timestamp: number]>) => Effect<A, E, R>) => Effect<A, E, R>;
useSync: (f: (service: ReadonlyArray<[label: string, timestamp: number]>) => A) => 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 for managing log spans that track the duration and hierarchy of operations.
Each span represents a labeled time period for performance analysis and debugging.
When to use
Use to carry the active log span stack that should be included with log
entries in the current context.
Example (Tracking log spans)
import { Console, Effect, References } from "effect"
const logSpanExample = Effect.gen(function*() {
// Get current spans (empty by default)
const current = yield* References.CurrentLogSpans
console.log(current.length) // 0
// Add a log span manually
const databaseConnectionStartedAt = 0
yield* Effect.provideService(
Effect.gen(function*() {
// Simulate some work
yield* Effect.sleep("100 millis")
yield* Console.log("Database operation in progress")
const spans = yield* References.CurrentLogSpans
console.log("Active spans:", spans.map(([label]) => label)) // ["database-connection"]
}),
References.CurrentLogSpans,
[["database-connection", databaseConnectionStartedAt]]
)
// Add another span
const dataProcessingStartedAt = 100
yield* Effect.provideService(
Effect.gen(function*() {
const spans = yield* References.CurrentLogSpans
console.log("Active spans:", spans.map(([label]) => label)) // ["database-connection", "data-processing"]
yield* Console.log("Multiple operations in progress")
}),
References.CurrentLogSpans,
[
["database-connection", databaseConnectionStartedAt],
["data-processing", dataProcessingStartedAt]
]
)
// Clear spans when operations complete
yield* Effect.provideService(
Effect.gen(function*() {
const spans = yield* References.CurrentLogSpans
console.log("Active spans:", spans.length) // 0
}),
References.CurrentLogSpans,
[]
)
})
CurrentLogSpans: import ContextContext.type Context.Reference = /*unresolved*/ anyReference<interface ReadonlyArray<T>ReadonlyArray<[stringlabel: string, numbertimestamp: number]>> =
import referencesreferences.const CurrentLogSpans: Context.Reference<
ReadonlyArray<
[label: string, timestamp: number]
>
>
const CurrentLogSpans: {
key: string;
Service: {
length: number;
toString: () => string;
toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string };
concat: { (...items: Array<ConcatArray<[label: string, timestamp: number]>>): Array<[label: string, timestamp: number]>; (...items: Array<[label: string, timestamp: number] | ConcatArray<[label: string, timestamp: number]>>): Array<[label: string,…;
join: (separator?: string) => string;
slice: (start?: number, end?: number) => Array<[label: string, timestamp: number]>;
indexOf: (searchElement: [label: string, timestamp: number], fromIndex?: number) => number;
lastIndexOf: (searchElement: [label: string, timestamp: number], fromIndex?: number) => number;
every: { (predicate: (value: [label: string, timestamp: number], index: number, array: ReadonlyArray<[label: string, timestamp: number]>) => value is S, thisArg?: any): this is readonly S[]; (predicate: (value: [label: string, timestamp: number],…;
some: (predicate: (value: [label: string, timestamp: number], index: number, array: ReadonlyArray<[label: string, timestamp: number]>) => unknown, thisArg?: any) => boolean;
forEach: (callbackfn: (value: [label: string, timestamp: number], index: number, array: ReadonlyArray<[label: string, timestamp: number]>) => void, thisArg?: any) => void;
map: (callbackfn: (value: [label: string, timestamp: number], index: number, array: ReadonlyArray<[label: string, timestamp: number]>) => U, thisArg?: any) => Array<U>;
filter: { (predicate: (value: [label: string, timestamp: number], index: number, array: ReadonlyArray<[label: string, timestamp: number]>) => value is S, thisArg?: any): Array<S>; (predicate: (value: [label: string, timestamp: number], index: numb…;
reduce: { (callbackfn: (previousValue: [label: string, timestamp: number], currentValue: [label: string, timestamp: number], currentIndex: number, array: ReadonlyArray<[label: string, timestamp: number]>) => [label: string, timestamp: number]): [l…;
reduceRight: { (callbackfn: (previousValue: [label: string, timestamp: number], currentValue: [label: string, timestamp: number], currentIndex: number, array: ReadonlyArray<[label: string, timestamp: number]>) => [label: string, timestamp: number]): [l…;
find: { (predicate: (value: [label: string, timestamp: number], index: number, obj: ReadonlyArray<[label: string, timestamp: number]>) => value is S, thisArg?: any): S | undefined; (predicate: (value: [label: string, timestamp: number], index: n…;
findIndex: (predicate: (value: [label: string, timestamp: number], index: number, obj: ReadonlyArray<[label: string, timestamp: number]>) => unknown, thisArg?: any) => number;
entries: () => ArrayIterator<[number, [label: string, timestamp: number]]>;
keys: () => ArrayIterator<number>;
values: () => ArrayIterator<[label: string, timestamp: number]>;
includes: (searchElement: [label: string, timestamp: number], fromIndex?: number) => boolean;
flatMap: (callback: (this: This, value: [label: string, timestamp: number], index: number, array: Array<[label: string, timestamp: number]>) => U | ReadonlyArray<U>, thisArg?: This | undefined) => Array<U>;
flat: (this: A, depth?: D | undefined) => Array<FlatArray<A, D>>;
at: (index: number) => [label: string, timestamp: number] | undefined;
findLast: { (predicate: (value: [label: string, timestamp: number], index: number, array: ReadonlyArray<[label: string, timestamp: number]>) => value is S, thisArg?: any): S | undefined; (predicate: (value: [label: string, timestamp: number], index:…;
findLastIndex: (predicate: (value: [label: string, timestamp: number], index: number, array: ReadonlyArray<[label: string, timestamp: number]>) => unknown, thisArg?: any) => number;
toReversed: () => Array<[label: string, timestamp: number]>;
toSorted: (compareFn?: ((a: [label: string, timestamp: number], b: [label: string, timestamp: number]) => number) | undefined) => Array<[label: string, timestamp: number]>;
toSpliced: { (start: number, deleteCount: number, ...items: Array<[label: string, timestamp: number]>): Array<[label: string, timestamp: number]>; (start: number, deleteCount?: number): Array<[label: string, timestamp: number]> };
with: (index: number, value: [label: string, timestamp: number]) => Array<[label: string, timestamp: number]>;
};
defaultValue: () => Shape;
of: (this: void, self: ReadonlyArray<[label: string, timestamp: number]>) => ReadonlyArray<[label: string, timestamp: number]>;
context: (self: ReadonlyArray<[label: string, timestamp: number]>) => Context.Context<never>;
use: (f: (service: ReadonlyArray<[label: string, timestamp: number]>) => Effect<A, E, R>) => Effect<A, E, R>;
useSync: (f: (service: ReadonlyArray<[label: string, timestamp: number]>) => A) => 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;
}
CurrentLogSpansReferenced by 2 symbols