Use @Catch() with no argument to catch all exceptions. Branch on instanceof HttpException — known HTTP exceptions are passed through with their status and message, while unknown errors are logged in full but return a generic 500 to the client. This two-branch pattern is the production standard.
Always log the full error including stack trace for unexpected errors.
Never expose internal error details (stack traces, DB errors) to the client.
HTTP exceptions are expected client errors — surface their message and status.
Unknown errors should always return 500 with a generic message.
Include the request path in error responses to help with client-side debugging.