Skip to main content
Module

x/oak_logger/mod.ts

A simple and opinionated logging middleware for Deno oak.
Latest
File
// Copyright 2018-2020 the oak_logger authors. All rights reserved. MIT license.
import { green, cyan, red, yellow,} from "https://deno.land/std@0.53.0/fmt/colors.ts";import { format } from "https://deno.land/std/datetime/mod.ts";let X_RESPONSE_TIME: string = "X-Response-Time";let User_Agent: string = "User-Agent";
/** The standard logging function that processes and logs requests. */const logger = async ( { response, request }: { response: any; request: any }, next: Function,) => { await next(); const responseTime = response.headers.get(X_RESPONSE_TIME); const User = request.headers.get(User_Agent); const status: number = response.status; const log_string: string = `[${ format(new Date(Date.now()), "MM-dd-yyyy hh:mm:ss.SSS") } Oak::logger] ${request.ip} "${request.method} ${request.url.pathname}" ${ String(status) } ${User} ${responseTime}`; var color = status >= 500 ? console.log(`${red(log_string)}`) // red : status >= 400 ? console.log(`${yellow(log_string)}`) // yellow : status >= 300 ? console.log(`${cyan(log_string)}`) // cyan : status >= 200 ? console.log(`${green(log_string)}`) // green : console.log(`${red(log_string)}`);};
/** Response time calculator that also adds response time header. */const responseTime = async ( { response }: { response: any }, next: Function,) => { const start = Date.now(); await next(); const ms: number = Date.now() - start; response.headers.set(X_RESPONSE_TIME, `${ms}ms`);};
export default { logger, responseTime };