import { Request, Response } from 'express'; /** * Log level possibilities. */ export type LogLevel = 'error' | 'warn' | 'info' | 'debug' | 'trace'; /** * Generic string template type for supporting string interpolation * with context args. */ export type StringTemplate = ((context: LoggerContext) => string) | string; /** * Hash map for managing context. */ export type LoggerContext = Record; /** * Hash map for adding context in message props. */ export type MessageContext = { /** * Context to be embed to msg */ ctx?: Record; }; /** * Logger transport type */ export declare enum LoggerTransport { StdoutPlain = "plain", StdoutPretty = "pretty", StdoutJson = "json" } /** * Logger global config */ export type GlobalLoggerConfig = { /** * Global prefixes */ prefixes?: StringTemplate[]; /** * Global manager for logging the context within the message */ shouldLogContext?: boolean; /** * Log transport */ transport?: LoggerTransport; /** * Minimum log level */ logLevel?: LogLevel; }; /** * Logger instance config */ export type LoggerConfig = { /** * Instance prefixes */ prefixes?: StringTemplate[]; }; /** * Default transport log function. */ type transportLogFunc = ( /** * Prefix of the message */ prefix: string, /** * Actual log message */ message: string, /** * Additional properties added to log JSON */ additionalProperties?: Record) => void; /** * Defines interface for a Transport implementation */ export interface TransportStrategy { /** * Define minimum log level following the sequence 'error' > 'warn' > 'info' > 'debug' > 'trace' */ setMinLogLevel: (level: LogLevel) => void; /** * Get minimum log level enabled */ getMinLogLevel: () => LogLevel; /** * Print message of 'info' log level */ info: transportLogFunc; /** * Print message of 'debug' log level */ debug: transportLogFunc; /** * Print message of 'warn' log level */ warn: transportLogFunc; /** * Print message of 'trace' log level */ trace: transportLogFunc; /** * Print message of 'error' log level */ error: transportLogFunc; } /** * Options for logging HTTP Requests */ export type RequestLoggerOptions = { request: Request; response: Response; context?: LoggerContext; level?: LogLevel; }; export {};