API REFERENCE

Logger

import { serverLogger, serverLoggerMinimal } from '@rasenganjs/server';

Two ready-made log callbacks for Futon's logger() middleware. Both have the signature (entry: LogEntry) => void — pass one directly as logger({ log }).

serverLogger()

function serverLogger(entry: LogEntry): void;

Colorful, human-readable output for local development — ANSI-colored HTTP method and status (green 2xx, cyan 3xx, yellow 4xx, red 5xx/errors), padded method column, timestamp, path, duration, and response size.

app.use(logger({ log: serverLogger }))
import { logger } from '@rasenganjs/futon'; import { serverLogger } from '@rasenganjs/server'; app.use(logger({ log: serverLogger }));
Example output
[2026-07-26T10:15:32.104Z] GET /api/users 200 4ms 128B

serverLoggerMinimal()

function serverLoggerMinimal(entry: LogEntry): void;

Single-line JSON output, suited for production log ingestion (CloudWatch, Datadog, ELK, etc.) — no ANSI codes.

app.use(logger({ log: serverLoggerMinimal }))
app.use(logger({ log: serverLoggerMinimal }));
Example output
{ "time": "2026-07-26T10:15:32.104Z", "method": "GET", "path": "/api/users", "status": 200, "duration": 4, "size": 128 }

LogEntry

Neither serverLogger nor serverLoggerMinimal re-export LogEntry by name — it's Futon's type, documented on the Middleware reference:

interface LogEntry { method: string; pathname: string; search: string; status: number; // 0 if downstream threw duration: number; // milliseconds size: number | null; }

Write your own log callback against this shape if neither preset fits — both serverLogger and serverLoggerMinimal are just ordinary functions matching it.

Upload
defineConfig