Logger<unknown, void>A Logger which outputs logs using the logfmt
style and writes them to the console.
Details
For example, a console logfmt entry is rendered as
timestamp=2025-01-03T14:22:47.570Z level=INFO fiber=#1 message=info.
Example (Logging logfmt output to the console)
import { Effect, Logger } from "effect"
// Use the console logfmt logger
const logfmtProgram = Effect.log("Hello LogFmt Console").pipe(
Effect.provide(Logger.layer([Logger.consoleLogFmt]))
)
// Great for production environments
const productionProgram = Effect.gen(function*() {
yield* Effect.log("Server started", { port: 8080, version: "1.0.0" })
yield* Effect.logInfo("Request processed", { userId: 123, duration: 45 })
yield* Effect.logError("Validation failed", {
field: "email",
value: "invalid"
})
}).pipe(
Effect.annotateLogs("service", "api"),
Effect.withLogSpan("request-handler"),
Effect.provide(Logger.layer([Logger.consoleLogFmt]))
)
// Combine with other loggers
const multiLoggerLive = Logger.layer([
Logger.consoleLogFmt,
Logger.consolePretty()
])export const const consoleLogFmt: Logger<unknown, void>const consoleLogFmt: {
log: (options: Options<unknown>) => void;
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; <…;
}
A Logger which outputs logs using the logfmt
style and writes them to the console.
Details
For example, a console logfmt entry is rendered as
timestamp=2025-01-03T14:22:47.570Z level=INFO fiber=#1 message=info.
Example (Logging logfmt output to the console)
import { Effect, Logger } from "effect"
// Use the console logfmt logger
const logfmtProgram = Effect.log("Hello LogFmt Console").pipe(
Effect.provide(Logger.layer([Logger.consoleLogFmt]))
)
// Great for production environments
const productionProgram = Effect.gen(function*() {
yield* Effect.log("Server started", { port: 8080, version: "1.0.0" })
yield* Effect.logInfo("Request processed", { userId: 123, duration: 45 })
yield* Effect.logError("Validation failed", {
field: "email",
value: "invalid"
})
}).pipe(
Effect.annotateLogs("service", "api"),
Effect.withLogSpan("request-handler"),
Effect.provide(Logger.layer([Logger.consoleLogFmt]))
)
// Combine with other loggers
const multiLoggerLive = Logger.layer([
Logger.consoleLogFmt,
Logger.consolePretty()
])
consoleLogFmt: 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, void> = const withConsoleLog: <Message, Output>(
self: Logger<Message, Output>
) => Logger<Message, void>
Returns a new Logger that writes all output of the specified Logger to
the console using console.log.
When to use
Use when a logger's string or object output should be routed to console.log for
development or debugging.
Example (Writing logger output with console.log)
import { Effect, Logger } from "effect"
// Create a custom formatter
const customFormatter = Logger.make((options) =>
`[${options.date.toISOString()}] ${options.logLevel}: ${options.message}`
)
// Route to console
const consoleLogger = Logger.withConsoleLog(customFormatter)
const program = Effect.log("Hello World").pipe(
Effect.provide(Logger.layer([consoleLogger]))
)
withConsoleLog(const formatLogFmt: Logger<
unknown,
string
>
const formatLogFmt: {
log: (options: Options<unknown>) => string;
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; <…;
}
A Logger which outputs logs using the logfmt
style.
Details
For example, a logfmt entry is rendered as
timestamp=2025-01-03T14:22:47.570Z level=INFO fiber=#1 message=hello.
Example (Formatting logs as logfmt)
import { Effect, Logger } from "effect"
// Use the logfmt format logger
const logfmtLoggerProgram = Effect.log("Hello LogFmt Format").pipe(
Effect.provide(Logger.layer([Logger.formatLogFmt]))
)
// Perfect for structured logging systems
const structuredProgram = Effect.gen(function*() {
yield* Effect.log("User login", { userId: 123, method: "OAuth" })
yield* Effect.logInfo("Request processed", {
duration: 45,
status: "success"
})
}).pipe(
Effect.provide(Logger.layer([Logger.withConsoleLog(Logger.formatLogFmt)]))
)
// Good for log aggregation systems like Splunk, ELK
const productionLogger = Logger.formatLogFmt
formatLogFmt)