Skip to content

Commit 02e1440

Browse files
committed
Incorporate feedback
1 parent 9498e84 commit 02e1440

File tree

2 files changed

+68
-81
lines changed

2 files changed

+68
-81
lines changed

Diff for: packages/logger/src/middleware/middy.ts

+11-12
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,11 @@ const injectLambdaContext = (
7777
const setCleanupFunction = (request: MiddyLikeRequest): void => {
7878
request.internal = {
7979
...request.internal,
80-
[LOGGER_KEY]: onAfter,
80+
[LOGGER_KEY]: after,
8181
};
8282
};
8383

84-
const onBefore = async (request: MiddyLikeRequest): Promise<void> => {
84+
const before = async (request: MiddyLikeRequest): Promise<void> => {
8585
for (const logger of loggers) {
8686
if (isResetStateEnabled) {
8787
setCleanupFunction(request);
@@ -98,18 +98,17 @@ const injectLambdaContext = (
9898
}
9999
};
100100

101-
const onAfter = async (): Promise<void> => {
102-
if (isResetStateEnabled) {
103-
for (const logger of loggers) {
104-
logger.resetKeys();
105-
}
106-
}
107-
101+
const after = async (): Promise<void> => {
108102
for (const logger of loggers) {
109103
logger.clearBuffer();
104+
105+
if (isResetStateEnabled) {
106+
logger.resetKeys();
107+
}
110108
}
111109
};
112-
const onError = async ({ error }): Promise<void> => {
110+
111+
const onError = async ({ error }: { error: unknown }): Promise<void> => {
113112
if (options?.flushBufferOnUncaughtError) {
114113
for (const logger of loggers) {
115114
logger.flushBuffer();
@@ -122,8 +121,8 @@ const injectLambdaContext = (
122121
};
123122

124123
return {
125-
before: onBefore,
126-
after: onAfter,
124+
before,
125+
after,
127126
onError,
128127
};
129128
};

Diff for: packages/logger/tests/unit/logBuffer.test.ts

+57-69
Original file line numberDiff line numberDiff line change
@@ -243,74 +243,62 @@ describe('Buffer logs', () => {
243243
expect(console.error).toBeCalledTimes(1);
244244
});
245245

246-
it('flushes the buffer when an uncaught error is thrown', async () => {
247-
// Prepare
248-
const logger = new Logger({ logBufferOptions: { enabled: true } });
249-
class TestClass {
250-
@logger.injectLambdaContext({ flushBufferOnUncaughtError: true })
251-
async handler(_event: unknown, _context: Context) {
252-
logger.debug('This is a log message');
253-
logger.info('This is an info message');
254-
throw new Error('This is an error');
255-
}
246+
it.each([
247+
{
248+
handlerFactory: (logger: Logger) =>
249+
middy()
250+
.use(
251+
injectLambdaContext(logger, { flushBufferOnUncaughtError: true })
252+
)
253+
.handler(async () => {
254+
logger.debug('This is a log message');
255+
logger.info('This is an info message');
256+
throw new Error('This is an error');
257+
}),
258+
case: 'middleware',
259+
},
260+
{
261+
handlerFactory: (logger: Logger) => {
262+
class TestClass {
263+
@logger.injectLambdaContext({ flushBufferOnUncaughtError: true })
264+
async handler(_event: unknown, _context: Context) {
265+
logger.debug('This is a log message');
266+
logger.info('This is an info message');
267+
throw new Error('This is an error');
268+
}
269+
}
270+
const lambda = new TestClass();
271+
return lambda.handler.bind(lambda);
272+
},
273+
case: 'decorator',
274+
},
275+
])(
276+
'flushes the buffer when an uncaught error is thrown ($case)',
277+
async ({ handlerFactory }) => {
278+
// Prepare
279+
const logger = new Logger({ logBufferOptions: { enabled: true } });
280+
const handler = handlerFactory(logger);
281+
282+
// Act & Assess
283+
await expect(() =>
284+
handler(
285+
{
286+
foo: 'bar',
287+
},
288+
context
289+
)
290+
).rejects.toThrow(new Error('This is an error'));
291+
expect(console.debug).toBeCalledTimes(1);
292+
expect(console.info).toBeCalledTimes(1);
293+
expect(console.error).toHaveLogged(
294+
expect.objectContaining({
295+
message: UncaughtErrorLogMessage,
296+
})
297+
);
298+
// If debug is called after info, it means it was buffered and then flushed
299+
expect(console.debug).toHaveBeenCalledAfter(console.info as Mock);
300+
// If error is called after debug, it means the buffer was flushed before the error log
301+
expect(console.debug).toHaveBeenCalledBefore(console.error as Mock);
256302
}
257-
const lambda = new TestClass();
258-
const handler = lambda.handler.bind(lambda);
259-
260-
// Act & Assess
261-
await expect(() =>
262-
handler(
263-
{
264-
foo: 'bar',
265-
},
266-
context
267-
)
268-
).rejects.toThrow(new Error('This is an error'));
269-
expect(console.debug).toBeCalledTimes(1);
270-
expect(console.info).toBeCalledTimes(1);
271-
expect(console.error).toHaveLogged(
272-
expect.objectContaining({
273-
message: UncaughtErrorLogMessage,
274-
})
275-
);
276-
// If debug is called after info, it means it was buffered and then flushed
277-
expect(console.debug).toHaveBeenCalledAfter(console.info as Mock);
278-
// If error is called after debug, it means the buffer was flushed before the error log
279-
expect(console.debug).toHaveBeenCalledBefore(console.error as Mock);
280-
});
281-
it('flushes the buffer when an uncaught error is thrown in a middy', async () => {
282-
// Prepare
283-
const logger = new Logger({ logBufferOptions: { enabled: true } });
284-
285-
const handlerFn = async (_event: unknown, _context: Context) => {
286-
logger.debug('This is a log message');
287-
logger.info('This is an info message');
288-
throw new Error('This is an error');
289-
};
290-
291-
const handler = middy()
292-
.use(injectLambdaContext(logger, { flushBufferOnUncaughtError: true }))
293-
.handler(handlerFn);
294-
295-
// Act & Assess
296-
await expect(() =>
297-
handler(
298-
{
299-
foo: 'bar',
300-
},
301-
context
302-
)
303-
).rejects.toThrow(new Error('This is an error'));
304-
expect(console.debug).toBeCalledTimes(1);
305-
expect(console.info).toBeCalledTimes(1);
306-
expect(console.error).toHaveLogged(
307-
expect.objectContaining({
308-
message: UncaughtErrorLogMessage,
309-
})
310-
);
311-
// If debug is called after info, it means it was buffered and then flushed
312-
expect(console.debug).toHaveBeenCalledAfter(console.info as Mock);
313-
// If error is called after debug, it means the buffer was flushed before the error log
314-
expect(console.debug).toHaveBeenCalledBefore(console.error as Mock);
315-
});
303+
);
316304
});

0 commit comments

Comments
 (0)