Skip to content

@adrianhall/cloudflare-toolkit


@adrianhall/cloudflare-toolkit / lib/hono / cloudflareLogger

Function: cloudflareLogger()

cloudflareLogger(options?): MiddlewareHandler<{ Variables: LoggerVariables; }>

Defined in: src/lib/hono/logger-middleware.ts:133

Create Hono middleware that attaches a request-scoped Logger to the context as LOGGER (LoggerVariables, ./types.ts), so downstream middleware and handlers can log through it.

The logger's level and transport are resolved via resolveLoggerConfig(environment, "worker") (@adrianhall/cloudflare-toolkit/logging) unless overridden. The minimum level is chosen in this order of precedence:

  1. options.level, when supplied.
  2. The LOG_LEVEL Worker binding (c.env.LOG_LEVEL), when it is a recognised LogLevel (case-insensitive). A value that is set but unrecognised is ignored with a console.warn.
  3. The environment-resolved default from resolveLoggerConfig(environment, "worker").

The transport defaults to resolveLoggerConfig's choice unless overridden by options.transport. This middleware is independently wireable — it has no dependency on cloudflareAccess.

Parameters

options?

CloudflareLoggerOptions = {}

Options controlling the environment, level, and transport used to build the logger.

Returns

MiddlewareHandler<{ Variables: LoggerVariables; }>

A Hono MiddlewareHandler parameterised with LoggerVariables, so c.set("LOGGER", …) inside this middleware — and c.get("LOGGER") in a consumer's own handlers once composed via app.use(...) — are statically checked against LoggerVariables rather than accepted as an untyped magic string.

Example

ts
import { Hono } from "hono";
import { cloudflareLogger } from "@adrianhall/cloudflare-toolkit/hono";

const app = new Hono();
app.use(cloudflareLogger());

app.get("/", (c) => {
  c.get("LOGGER").info("handling request");
  return c.text("ok");
});