UNPKG

@neodx/log

Version:

A lightweight universal logging framework

142 lines (138 loc) 3.82 kB
import { Colors } from '@neodx/colors'; import { IncomingMessage, OutgoingMessage } from 'http'; import { b as Logger } from '../_internal/types-Co7FibqF.js'; declare const HTTP_LOG_START_TIME_SYMBOL: unique symbol; interface HttpLoggerParams< Req extends IncomingMessage = IncomingMessage, Res extends OutgoingMessage = OutgoingMessage > { /** * Custom logger instance. * @default createLogger() */ logger?: Logger<HttpLogLevels>; /** * Custom colors instance * @see `@neodx/colors` */ colors?: Colors; /** * If `true`, the logger will only log the pre-formatted message without any additional metadata. * @default process.env.NODE_ENV === 'development' */ simple?: boolean; /** * Optional function to extract/create request ID. * @default built-in simple safe number counter */ getRequestId?: (req: Req, res: Res) => string | number; /** * Extract shared metadata for every produced log */ getMeta?: (req: Req, res: Res) => Record<string, unknown>; /** * Extract metadata for request logs */ getRequestMeta?: (ctx: HttpResponseContext<Req, Res>) => Record<string, unknown>; /** * Custom incoming request message formatter */ getRequestMessage?: (ctx: HttpResponseContext<Req, Res>) => string; /** * Extract metadata for success response logs */ getResponseMeta?: (ctx: HttpResponseContext<Req, Res>) => Record<string, unknown>; /** * Custom success response message formatter */ getResponseMessage?: (ctx: HttpResponseContext<Req, Res>) => string; /** * Extract metadata for error response logs */ getErrorMeta?: (ctx: HttpResponseContext<Req, Res>) => Record<string, unknown>; /** * Custom error response message formatter */ getErrorMessage?: (ctx: HttpResponseContext<Req, Res>) => string; /** * Whether to log anything at all. * @default true */ shouldLog?: boolean | ((req: Req, res: Res) => boolean); /** * Prevents logging of errors. * @default true */ shouldLogError?: boolean | ((ctx: HttpResponseContext<Req, Res>) => boolean); /** * Prevents built-in logging of requests. * DISABLED BY DEFAULT, because it can be very verbose. * @default false */ shouldLogRequest?: boolean | ((ctx: HttpResponseContext<Req, Res>) => boolean); /** * Prevents built-in logging of responses. * @default true */ shouldLogResponse?: boolean | ((ctx: HttpResponseContext<Req, Res>) => boolean); } interface HttpLoggerMetaKeys { req: string; res: string; err: string; requestId: string; responseTime: string; } interface HttpResponseContext< Req extends IncomingMessage = IncomingMessage, Res extends OutgoingMessage = OutgoingMessage > { req: Req; res: Res; error?: Error; logger: Logger<HttpLogLevels>; colors: Colors; responseTime: number; } type HttpRequestId = string | number; type HttpLogLevels = 'debug' | 'error' | 'info' | 'done'; declare module 'http' { interface IncomingMessage { id: HttpRequestId; log: Logger<HttpLogLevels>; } interface ServerResponse { err?: Error | undefined; } interface OutgoingMessage { [HTTP_LOG_START_TIME_SYMBOL]: number; } } declare function createHttpLogger< Req extends IncomingMessage = IncomingMessage, Res extends OutgoingMessage = OutgoingMessage >({ simple, colors, logger: rootLogger, getRequestId, getMeta, getErrorMeta, getErrorMessage, getRequestMeta, getRequestMessage, getResponseMeta, getResponseMessage, shouldLog, shouldLogError, shouldLogRequest, shouldLogResponse }?: HttpLoggerParams<Req, Res>): (req: Req, res: Res, next?: () => void) => void; export { type HttpLogLevels, type HttpLoggerMetaKeys, type HttpLoggerParams, type HttpRequestId, type HttpResponseContext, createHttpLogger };