devD
tRPC3mo ago
1 reply
dev

what's the correct way of reporting unhandled errors to Datadog (or similar services)?

I tried multiple things to make sure that Datadog sees the actual error being thrown, but no matter what I did, the error is always the same (screenshot attached).

This is my current logger (it was much simpler before, but I tried to recursively find the cause error with no luck).

import { TRPCError } from '@trpc/server';
import * as trpcExpress from '@trpc/server/adapters/express';
import express from 'express';
import logger from 'server/logger';
import { createContext } from 'server/trpc/context';
import { trpcRouter } from 'server/trpc/mainRouter';

function getLoggableError(error: unknown): unknown {
  if (error instanceof Error && error.cause instanceof Error) {
    return getLoggableError(error.cause);
  }
  return error;
}

export function initTRPC(app: express.Application) {
  app.use(
    '/api/trpc',
    trpcExpress.createExpressMiddleware({
      router: trpcRouter,
      createContext: createContext,
      onError: ({ error, path, type, input }) => {
        if (error instanceof TRPCError && error.code === 'INTERNAL_SERVER_ERROR') {
          const loggable = getLoggableError(error);
          logger.error(loggable, {
            path,
            type,
            input: type === 'query' ? input : undefined,
            trpcCode: error.code,
            trpcMessage: error.message,
            trpcStack: error.stack,
          });
        }
      },
    })
  );
}
image.png
Was this page helpful?