diff --git a/.changeset/honest-moose-eat.md b/.changeset/honest-moose-eat.md new file mode 100644 index 0000000000..be42e9e26b --- /dev/null +++ b/.changeset/honest-moose-eat.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Add optional `logClientErrors` to errorHandler to log 4XX errors diff --git a/packages/backend-common/src/middleware/errorHandler.test.ts b/packages/backend-common/src/middleware/errorHandler.test.ts index 6d22c2f175..78baaf5090 100644 --- a/packages/backend-common/src/middleware/errorHandler.test.ts +++ b/packages/backend-common/src/middleware/errorHandler.test.ts @@ -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(); + }); }); diff --git a/packages/backend-common/src/middleware/errorHandler.ts b/packages/backend-common/src/middleware/errorHandler.ts index 2f3b904d38..4b609a649f 100644 --- a/packages/backend-common/src/middleware/errorHandler.ts +++ b/packages/backend-common/src/middleware/errorHandler.ts @@ -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); }