feat(errorHandler): log client errors
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user