diff --git a/src/route-handlers/describe-domain/describe-domain.ts b/src/route-handlers/describe-domain/describe-domain.ts index 9d03fe01..d9b4317d 100644 --- a/src/route-handlers/describe-domain/describe-domain.ts +++ b/src/route-handlers/describe-domain/describe-domain.ts @@ -3,7 +3,7 @@ import { type NextRequest, NextResponse } from 'next/server'; import decodeUrlParams from '@/utils/decode-url-params'; import * as grpcClient from '@/utils/grpc/grpc-client'; import { getHTTPStatusCode, GRPCError } from '@/utils/grpc/grpc-error'; -import logger from '@/utils/logger'; +import logger, { type RouteHandlerErrorPayload } from '@/utils/logger'; import { type RequestParams, type RouteParams } from './describe-domain.types'; @@ -20,8 +20,8 @@ export async function describeDomain( return NextResponse.json(res.domain); } catch (e) { - logger.error( - { requestParams: decodedParams, error: e }, + logger.error( + { requestParams: decodedParams, cause: e }, 'Error fetching domain info' ); diff --git a/src/route-handlers/list-workflows/list-workflows.ts b/src/route-handlers/list-workflows/list-workflows.ts index e4e0d56d..c2ab4be2 100644 --- a/src/route-handlers/list-workflows/list-workflows.ts +++ b/src/route-handlers/list-workflows/list-workflows.ts @@ -3,7 +3,7 @@ import { type NextRequest, NextResponse } from 'next/server'; import decodeUrlParams from '@/utils/decode-url-params'; import * as grpcClient from '@/utils/grpc/grpc-client'; import { getHTTPStatusCode, GRPCError } from '@/utils/grpc/grpc-error'; -import logger from '@/utils/logger'; +import logger, { type RouteHandlerErrorPayload } from '@/utils/logger'; import getListWorkflowExecutionsQuery from './helpers/get-list-workflow-executions-query'; import mapExecutionsToWorkflows from './helpers/map-executions-to-workflows'; @@ -59,8 +59,8 @@ export async function listWorkflows( return NextResponse.json(response); } catch (e) { - logger.error( - { requestParams: decodedParams, queryParams, error: e }, + logger.error( + { requestParams: decodedParams, queryParams, cause: e }, 'Error fetching workflows' + (e instanceof GRPCError ? ': ' + e.message : '') ); diff --git a/src/route-handlers/log-to-server/log-to-server.ts b/src/route-handlers/log-to-server/log-to-server.ts index cfde641b..5e914d55 100644 --- a/src/route-handlers/log-to-server/log-to-server.ts +++ b/src/route-handlers/log-to-server/log-to-server.ts @@ -1,6 +1,6 @@ import { NextResponse, type NextRequest } from 'next/server'; -import logger from '@/utils/logger'; +import logger, { type RouteHandlerErrorPayload } from '@/utils/logger'; import logToServerPayloadSchema from './schemas/log-to-server-payload-schema'; @@ -8,11 +8,15 @@ export async function logToServer(request: NextRequest) { const requestBodyJSON = await request.json(); const { data, error } = logToServerPayloadSchema.safeParse(requestBodyJSON); if (error) { - logger.error(error, 'Failed to parse log from browser'); + logger.error( + { cause: error }, + 'Failed to parse log from browser' + ); return NextResponse.json( { message: 'Could not log browser log on server', + cause: error.errors, }, { status: 400, diff --git a/src/utils/logger/index.ts b/src/utils/logger/index.ts index 55cf8152..ece026b9 100644 --- a/src/utils/logger/index.ts +++ b/src/utils/logger/index.ts @@ -10,5 +10,6 @@ export const LOG_LEVELS = Object.values(logger.levels.labels); // Types export { type LogLevel as LogLevel } from './pino/pino.types'; +export * from './logger.types'; export default logger; diff --git a/src/utils/logger/logger.types.ts b/src/utils/logger/logger.types.ts new file mode 100644 index 00000000..95713715 --- /dev/null +++ b/src/utils/logger/logger.types.ts @@ -0,0 +1,5 @@ +export type RouteHandlerErrorPayload = { + cause?: any; + requestParams?: object; + queryParams?: object; +}; diff --git a/src/utils/request/request.ts b/src/utils/request/request.ts index 2fd202b5..e90fe7c8 100644 --- a/src/utils/request/request.ts +++ b/src/utils/request/request.ts @@ -14,7 +14,9 @@ export default function request( async (res) => { if (!res.ok) { const error = await res.json(); - throw new RequestError(error.message, res.status); + throw new RequestError(error.message, res.status, { + cause: error.cause, + }); } return res; }