Skip to main content
Module

x/denzo_logger/mod.ts

Simple logger plugin for Denzo
Latest
File
import { createPlugin, DenzoReply, DenzoRequest } from "denzo";import { Colors } from "./deps.ts";
const { blue, gray, green, red, yellow,} = Colors;
const methodColorMap: Record<string, string> = { GET: blue("GET"), POST: green("POST"), PATCH: yellow("PATCH"), DELETE: red("DELETE"), OPTIONS: blue("OPTIONS"),};
function colorizeMethod(method: string) { const colorizedMethod = methodColorMap[method]; if (colorizedMethod) return colorizedMethod; return method;}
function colorizeUrl(url: URL) { const params = url.searchParams.toString(); if (params) return url.pathname + gray("?" + params); return url.pathname;}
function colorizeStatus(status: number) { const str = status.toString(); if (status < 200) return str; // 1xx if (status < 300) return green(str); // 2xx if (status < 400) return blue(str); // 3xx if (status < 500) return yellow(str); // 4xx if (status < 600) return red(str); // 5xx return str;}
function colorizeResponseTime(time: number) { const str = time.toString() + "ms"; if (time < 100) return str; // fast if (time < 400) return yellow(str); // slow return red(str); // too slow}
export type FilterFn = (request: DenzoRequest, reply: DenzoReply) => boolean;
export interface LoggerConfig { type?: "simple" | "+timestamp"; filter?: FilterFn;}
function simpleLogger(request: DenzoRequest, reply: DenzoReply) { console.log( colorizeMethod(request.method), colorizeUrl(request.url), colorizeStatus(reply.statusCode), colorizeResponseTime(reply.responseTime), );}
function timestampLogger(request: DenzoRequest, reply: DenzoReply) { console.log( gray(new Date().toISOString()), colorizeMethod(request.method), colorizeUrl(request.url), colorizeStatus(reply.statusCode), colorizeResponseTime(reply.responseTime), );}
export const logger = createPlugin( "denzo-logger", (denzo, config: LoggerConfig = {}) => { const filter = config.filter || (() => true); const loggerType = config.type || "simple"; const logger = loggerType === "simple" ? simpleLogger : timestampLogger;
denzo.addHook("onResponse", (request, reply) => { if (!filter(request, reply)) return; logger(request, reply); }, { scope: "parent" }); },);