import { FastifyError } from '@fastify/error' import { FastifyInstance } from './instance' import { FastifyReply } from './reply' import { FastifyRequest } from './request' import { RouteGenericInterface } from './route' import { FastifySchema } from './schema' import { FastifyTypeProvider, FastifyTypeProviderDefault } from './type-provider' import { ContextConfigDefault, RawReplyDefaultExpression, RawRequestDefaultExpression, RawServerBase, RawServerDefault } from './utils' import pino from 'pino' /** * Standard Fastify logging function */ export type FastifyLogFn = pino.LogFn export type LogLevel = pino.LevelWithSilent export type Bindings = pino.Bindings export type ChildLoggerOptions = pino.ChildLoggerOptions export interface FastifyBaseLogger extends pino.BaseLogger { child(bindings: Bindings, options?: ChildLoggerOptions): FastifyBaseLogger } // TODO delete FastifyBaseLogger in the next major release. It seems that it is enough to have only FastifyBaseLogger. /** * @deprecated Use FastifyBaseLogger instead */ export type FastifyLoggerInstance = FastifyBaseLogger export interface FastifyLoggerStreamDestination { write(msg: string): void; } export type PinoLoggerOptions = pino.LoggerOptions // TODO: once node 18 is EOL, this type can be replaced with plain FastifyReply. /** * Specialized reply type used for the `res` log serializer, since only `statusCode` is passed in certain cases. */ export type ResSerializerReply< RawServer extends RawServerBase, RawReply extends FastifyReply > = Partial & Pick /** * Fastify Custom Logger options. */ export interface FastifyLoggerOptions< RawServer extends RawServerBase = RawServerDefault, RawRequest extends FastifyRequest, FastifySchema, FastifyTypeProvider> = FastifyRequest, FastifySchema, FastifyTypeProviderDefault>, RawReply extends FastifyReply, RawReplyDefaultExpression, ContextConfigDefault, FastifySchema, FastifyTypeProvider> = FastifyReply, RawReplyDefaultExpression, ContextConfigDefault, FastifySchema, FastifyTypeProviderDefault> > { serializers?: { req?: (req: RawRequest) => { method?: string; url?: string; version?: string; host?: string; remoteAddress?: string; remotePort?: number; [key: string]: unknown; }; err?: (err: FastifyError) => { type: string; message: string; stack: string; [key: string]: unknown; }; res?: (res: ResSerializerReply) => { statusCode?: string | number; [key: string]: unknown; }; }; level?: string; file?: string; genReqId?: (req: RawRequest) => string; stream?: FastifyLoggerStreamDestination; } export interface FastifyChildLoggerFactory< RawServer extends RawServerBase = RawServerDefault, RawRequest extends RawRequestDefaultExpression = RawRequestDefaultExpression, RawReply extends RawReplyDefaultExpression = RawReplyDefaultExpression, Logger extends FastifyBaseLogger = FastifyBaseLogger, TypeProvider extends FastifyTypeProvider = FastifyTypeProviderDefault > { /** * @param logger The parent logger * @param bindings The bindings object that will be passed to the child logger * @param childLoggerOpts The logger options that will be passed to the child logger * @param rawReq The raw request * @this The fastify instance * @returns The child logger instance */ ( this: FastifyInstance, logger: Logger, bindings: Bindings, childLoggerOpts: ChildLoggerOptions, rawReq: RawRequest ): Logger }