feat(errorHandler): log client errors

This commit is contained in:
Mijail Rondon
2021-02-24 07:37:54 -05:00
parent 8317e746cb
commit 4978590888
3 changed files with 30 additions and 3 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-common': patch
---
Add optional `logClientErrors` to errorHandler to log 4XX errors
@@ -134,4 +134,20 @@ describe('errorHandler', () => {
expect(mockLogger.error).not.toHaveBeenCalled();
});
it('log 400 errors when logClientErrors is true', async () => {
const app = express();
const mockLogger = { child: jest.fn(), error: jest.fn() };
mockLogger.child.mockImplementation(() => mockLogger as any);
app.use('/NotFound', () => {
throw new errors.NotFoundError();
});
app.use(errorHandler({ logger: mockLogger as any, logClientErrors: true }));
await request(app).get('/NotFound');
expect(mockLogger.error).toHaveBeenCalled();
});
});
@@ -28,11 +28,18 @@ export type ErrorHandlerOptions = {
showStackTraces?: boolean;
/**
* Logger instance to log any 5xx errors.
* Logger instance to log errors.
*
* If not specified, the root logger will be used.
*/
logger?: Logger;
/**
* Whether any error < 4XX should be logged or not.
*
* If not specified, by default log any 5xx errors.
*/
logClientErrors?: boolean;
};
/**
@@ -59,7 +66,6 @@ export function errorHandler(
type: 'errorHandler',
});
/* eslint-disable @typescript-eslint/no-unused-vars */
return (
error: Error,
_request: Request,
@@ -76,7 +82,7 @@ export function errorHandler(
const status = getStatusCode(error);
const message = showStackTraces ? error.stack : error.message;
if (logger && status >= 500) {
if (options.logClientErrors || status >= 500) {
logger.error(error);
}