diff --git a/next.config.mjs b/next.config.mjs index 2d9a3381..1e08402a 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -56,7 +56,7 @@ const nextConfig = { return config }, experimental: { - serverComponentsExternalPackages: ['pino'] + serverComponentsExternalPackages: ['pino', 'pino-pretty'] } } diff --git a/src/app/api/organizations/[id]/ledgers/[ledgerId]/portfolios/[portfolioId]/route.ts b/src/app/api/organizations/[id]/ledgers/[ledgerId]/portfolios/[portfolioId]/route.ts index f186e9f6..56c2756b 100644 --- a/src/app/api/organizations/[id]/ledgers/[ledgerId]/portfolios/[portfolioId]/route.ts +++ b/src/app/api/organizations/[id]/ledgers/[ledgerId]/portfolios/[portfolioId]/route.ts @@ -33,6 +33,7 @@ export async function DELETE( { params }: { params: { id: string; ledgerId: string; portfolioId: string } } ) { const { id: organizationId, ledgerId, portfolioId } = params + const midazId = request.headers.get('X-Midaz-Id') return RequestContextManager.runWithContext( request.url, request.method, @@ -40,9 +41,12 @@ export async function DELETE( organizationId, ledgerId, portfolioId, - deletedAt: new Date().toISOString() + deletedAt: new Date().toISOString(), + midazId }, async () => { + console.log('midazId delete', midazId) + try { await deletePortfolioUseCase.execute( organizationId, diff --git a/src/app/api/organizations/[id]/ledgers/[ledgerId]/portfolios/route.ts b/src/app/api/organizations/[id]/ledgers/[ledgerId]/portfolios/route.ts index 5450d312..9c73b03d 100644 --- a/src/app/api/organizations/[id]/ledgers/[ledgerId]/portfolios/route.ts +++ b/src/app/api/organizations/[id]/ledgers/[ledgerId]/portfolios/route.ts @@ -99,13 +99,15 @@ export async function POST( { params }: { params: { id: string; ledgerId: string } } ) { const { id: organizationId, ledgerId } = params - + const midazId = request.headers.get('X-Midaz-Id') return RequestContextManager.runWithContext( request.url, request.method, - { organizationId, ledgerId }, + { organizationId, ledgerId, midazId }, async () => { try { + console.log('midazId post', midazId) + console.log('request readers', request.headers) const body = await request.json() const portfolio = await createPortfolioUseCase.execute( organizationId, diff --git a/src/lib/logger/pino-logger.ts b/src/lib/logger/pino-logger.ts index 77f70edc..bad6e648 100644 --- a/src/lib/logger/pino-logger.ts +++ b/src/lib/logger/pino-logger.ts @@ -3,6 +3,7 @@ import pino, { Logger, LoggerOptions } from 'pino' import { randomUUID } from 'crypto' import { LogContext, LogEntry, LogMetadata } from './types' +import { NextRequest } from 'next/server' export class PinoLogger { private static instance: PinoLogger @@ -48,40 +49,95 @@ export class PinoLogger { level: LogEntry['level'], message: string, metadata: LogMetadata, - context: LogContext + context: LogContext, + request?: NextRequest ): LogEntry { return { level, message, timestamp: new Date().toISOString(), - traceId: metadata.traceId || randomUUID(), metadata, context } } - info(message: string, metadata: LogMetadata = {}, context: LogContext) { - const logEntry = this.createLogEntry('INFO', message, metadata, context) + info( + message: string, + metadata: LogMetadata = {}, + context: LogContext, + request?: NextRequest + ) { + const logEntry = this.createLogEntry( + 'INFO', + message, + metadata, + context, + request + ) this.logger.info(logEntry) } - error(message: string, metadata: LogMetadata = {}, context: LogContext) { - const logEntry = this.createLogEntry('ERROR', message, metadata, context) + error( + message: string, + metadata: LogMetadata = {}, + context: LogContext, + request?: NextRequest + ) { + const logEntry = this.createLogEntry( + 'ERROR', + message, + metadata, + context, + request + ) this.logger.error(logEntry) } - warn(message: string, metadata: LogMetadata = {}, context: LogContext) { - const logEntry = this.createLogEntry('WARN', message, metadata, context) + warn( + message: string, + metadata: LogMetadata = {}, + context: LogContext, + request?: NextRequest + ) { + const logEntry = this.createLogEntry( + 'WARN', + message, + metadata, + context, + request + ) this.logger.warn(logEntry) } - debug(message: string, metadata: LogMetadata = {}, context: LogContext) { - const logEntry = this.createLogEntry('DEBUG', message, metadata, context) + debug( + message: string, + metadata: LogMetadata = {}, + context: LogContext, + request?: NextRequest + ) { + const logEntry = this.createLogEntry( + 'DEBUG', + message, + metadata, + context, + request + ) this.logger.debug(logEntry) } - audit(message: string, metadata: LogMetadata = {}, context: LogContext) { - const logEntry = this.createLogEntry('AUDIT', message, metadata, context) + audit( + message: string, + metadata: LogMetadata = {}, + context: LogContext, + request?: NextRequest + ) { + const logEntry = this.createLogEntry( + 'AUDIT', + message, + metadata, + context, + request + ) this.logger.info(logEntry) } } diff --git a/src/lib/logger/request-context.ts b/src/lib/logger/request-context.ts index 5fd3431f..394c33a1 100644 --- a/src/lib/logger/request-context.ts +++ b/src/lib/logger/request-context.ts @@ -38,6 +38,7 @@ export class RequestContextManager { initialMetadata: Record, fn: () => Promise ): Promise { + console.log('initialMetadata', initialMetadata) const context: RequestContext = { requestId: crypto.randomUUID(), startTime: Date.now(), diff --git a/src/lib/logger/types.ts b/src/lib/logger/types.ts index d67fb42b..9c7b2ede 100644 --- a/src/lib/logger/types.ts +++ b/src/lib/logger/types.ts @@ -15,7 +15,7 @@ export interface LogEntry { level: 'INFO' | 'ERROR' | 'WARN' | 'DEBUG' | 'AUDIT' message: string timestamp: string - traceId: string + midazId?: string metadata: LogMetadata context: LogContext } diff --git a/src/middleware/middleware.ts b/src/middleware.ts similarity index 67% rename from src/middleware/middleware.ts rename to src/middleware.ts index bcecf6ae..3b2ae73a 100644 --- a/src/middleware/middleware.ts +++ b/src/middleware.ts @@ -1,7 +1,6 @@ -import { apiLoggerMiddleware } from './api-logger.middleware' import { NextResponse } from 'next/server' import type { NextRequest } from 'next/server' - +import { apiLoggerMiddleware } from './middleware/api-logger.middleware' export async function middleware(request: NextRequest) { if (request.nextUrl.pathname.startsWith('/api')) { return apiLoggerMiddleware(request, () => @@ -13,5 +12,8 @@ export async function middleware(request: NextRequest) { } export const config = { - matcher: ['/((?!_next/static|_next/image|favicon.ico|public/).*)'] + matcher: [ + '/api/:path*', + '/((?!_next/static|_next/image|favicon.ico|public/.*).*)' + ] } diff --git a/src/middleware/api-logger.middleware.ts b/src/middleware/api-logger.middleware.ts index c573df1b..0483b34c 100644 --- a/src/middleware/api-logger.middleware.ts +++ b/src/middleware/api-logger.middleware.ts @@ -33,8 +33,8 @@ export async function apiLoggerMiddleware( ...requestMetadata } }) - - response.headers.set('X-Request-Id', requestId) + console.log('reponse api-logger middleware', response) + response.headers.set('X-Midaz-Id', requestId) return response } catch (error) { const duration = Date.now() - startTime