1effect/Logger#add:
2 replacement: "Logger.layer([logger], { mergeWithExisting: true })"
3 note: "Logger installation is whole-set based; mergeWithExisting reproduces add."
4effect/Logger#addEffect:
5 replacement: "Logger.layer([loggerEffect], { mergeWithExisting: true })"
6 note: "Logger.layer accepts effects that construct loggers."
7effect/Logger#addScoped:
8 replacement: "Logger.layer([scopedLoggerEffect], { mergeWithExisting: true })"
9 note: "Layer acquisition handles the scoped effect; the separate scoped constructor is gone."
10effect/Logger#batched:
11 replacement: "Logger.batched(logger, { window, flush })"
12 note: "The trailing arguments moved into one options object. Provide any services needed by flush before constructing it."
13effect/Logger#filterLogLevel:
14 replacement: "Logger.make(options => predicate(options.logLevel) ? Option.some(logger.log(options)) : Option.none())"
15 note: "No named combinator remains; rebuild the wrapper with Logger.make. Prefer References.MinimumLogLevel for ordinary threshold filtering."
16effect/Logger#json:
17 replacement: "Logger.layer([Logger.consoleJson, Logger.tracerLogger])"
18 note: "Logger.layer replaces the active set. Include tracerLogger to preserve v3 built-in layer behavior, or omit it when trace log events are intentionally disabled."
19effect/Logger#jsonLogger:
20 replacement: "Logger.formatJson"
21 note: "Formatter rename; v4 JSON output uses level rather than logLevel."
22effect/Logger#logFmt:
23 replacement: "Logger.layer([Logger.consoleLogFmt, Logger.tracerLogger])"
24 note: "Logger.layer replaces the active set; include tracerLogger to preserve v3 built-in layer behavior."
25effect/Logger#logfmtLogger:
26 replacement: "Logger.formatLogFmt"
27 note: "Formatter rename and capitalization change."
28effect/Logger#Logger:
29 replacement: "Logger.Logger"
30 note: "The name remains. Logger.Options now has fiber instead of fiberId; read the id from fiber.id and annotations or spans through fiber references."
31effect/Logger#Logger.Variance:
32 replacement: "none"
33 note: "Public variance metadata was removed; use Logger.Logger<Message, Output> directly."
34effect/Logger#LoggerTypeId:
35 replacement: "Logger.isLogger"
36 note: "The brand is private in v4; use the public runtime guard."
37effect/Logger#map:
38 replacement: "Logger.map"
39 note: "Retained with the same output-mapping behavior."
40effect/Logger#mapInput:
41 replacement: "Logger.make(options => logger.log({ ...options, message: f(options.message) }))"
42 note: "No named input contramap remains; rebuild it with Logger.make."
43effect/Logger#mapInputOptions:
44 replacement: "Logger.make(options => logger.log(f(options)))"
45 note: "No named options contramap remains; rebuild it with Logger.make and adapt f to the v4 Logger.Options shape."
46effect/Logger#minimumLogLevel:
47 replacement: "Layer.succeed(References.MinimumLogLevel, level)"
48 note: "Minimum log level is now a context reference."
49effect/Logger#none:
50 replacement: "Logger.make(() => undefined)"
51 note: "Rebuild the no-op logger with Logger.make."
52effect/Logger#pretty:
53 replacement: "Logger.layer([Logger.consolePretty(), Logger.tracerLogger])"
54 note: "Logger.layer replaces the active set; include tracerLogger to preserve v3 built-in layer behavior."
55effect/Logger#prettyLogger:
56 replacement: "Logger.consolePretty"
57 note: "Renamed to consolePretty. Remove the stderr option; provide Logger.LogToStderr with true to route TTY output to console.error. Colors, formatDate, and mode remain constructor options."
58effect/Logger#prettyLoggerDefault:
59 replacement: "Logger.consolePretty()"
60 note: "The prebuilt singleton became a constructor call."
61effect/Logger#remove:
62 replacement: "Logger.layer([...desiredLoggers])"
63 note: "No named removal combinator remains. Declare the complete desired logger set; transform Logger.CurrentLoggers only when removing from an unknown inherited set is unavoidable."
64effect/Logger#replace:
65 replacement: "Logger.layer([...desiredLoggers])"
66 note: "V4 replaces the whole active set. When replacing the old default logger, include Logger.tracerLogger explicitly if it must survive."
67effect/Logger#replaceEffect:
68 replacement: "Logger.layer([loggerEffect, ...otherLoggers])"
69 note: "Logger.layer accepts effects. Explicitly list every logger that must remain active."
70effect/Logger#replaceScoped:
71 replacement: "Logger.layer([scopedLoggerEffect, ...otherLoggers])"
72 note: "Logger.layer acquisition supplies the scope; explicitly list every logger that must remain active."
73effect/Logger#simple:
74 replacement: "Logger.make(({ message }) => log(message))"
75 note: "V3 simple was a message-only custom logger constructor; rebuild it with Logger.make."
76effect/Logger#stringLogger:
77 replacement: "Logger.formatSimple"
78 note: "The prebuilt string formatter was renamed."
79effect/Logger#structured:
80 replacement: "Logger.layer([Logger.consoleStructured, Logger.tracerLogger])"
81 note: "Logger.layer replaces the active set; include tracerLogger to preserve v3 built-in layer behavior."
82effect/Logger#structuredLogger:
83 replacement: "Logger.formatStructured"
84 note: "Formatter rename; its output field logLevel is now named level."
85effect/Logger#succeed:
86 replacement: "Logger.make(() => value)"
87 note: "Rebuild the constant-output logger with Logger.make."
88effect/Logger#sync:
89 replacement: "Logger.make(() => evaluate())"
90 note: "Rebuild the lazy-output logger; evaluate still runs once per log event."
91effect/Logger#test:
92 replacement: "Effect.log(input).pipe(Effect.provide(Logger.layer([capturingLogger])))"
93 note: "No synthetic-options helper remains. Exercise the logger through the runtime and capture its output so it receives a real Fiber, cause, level, and date."
94effect/Logger#withMinimumLogLevel:
95 replacement: "Effect.provideService(effect, References.MinimumLogLevel, level)"
96 note: "Replace the FiberRef-local helper with reference provisioning."
97effect/Logger#withSpanAnnotations:
98 replacement: "custom Logger.make wrapper using options.fiber.cache.span"
99 note: "No transparent generic equivalent remains. Read span identity from options.fiber.cache.span and add it to custom output as needed."
100effect/Logger#zip:
101 replacement: "Logger.make(options => [left.log(options), right.log(options)])"
102 note: "No named combinator remains; invoke both loggers and return their output tuple."
103effect/Logger#zipLeft:
104 replacement: "Logger.make(options => { const output = left.log(options); right.log(options); return output })"
105 note: "Rebuild explicitly, preserving evaluation of both loggers and returning the left output."
106effect/Logger#zipRight:
107 replacement: "Logger.make(options => { left.log(options); return right.log(options) })"
108 note: "Rebuild explicitly, preserving evaluation order and returning the right output."