Skip to content

Commit 5f8fe3f

Browse files
Support custom LogLevel when logging errors (#67)
* Support logging errors as warnings
1 parent 660273f commit 5f8fe3f

4 files changed

Lines changed: 60 additions & 3 deletions

File tree

docker-compose.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version: "2.2"
1+
version: '2.2'
22
services:
33
rabbit-queue:
44
image: node:14
@@ -11,3 +11,5 @@ services:
1111
RABBIT_URL: 'amqp://rabbit'
1212
rabbit:
1313
image: rabbitmq
14+
ports:
15+
- '5672:5672'

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/base-queue-handler.test.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,4 +237,49 @@ describe('Test baseQueueHandler', function () {
237237
migratorSpy.args[0][0].should.equal(this.name);
238238
migratorSpy.args[1][0].should.equal(this.name + '_dlq');
239239
});
240+
241+
it('should log error as warning when error has logAsWarning property set to true', async function () {
242+
const handler = new DemoHandler(this.name, rabbit, {
243+
retries: 0,
244+
retryDelay: 10
245+
});
246+
await handler.created;
247+
const warnSpy = sandbox.spy(handler.logger, 'warn');
248+
const errorSpy = sandbox.spy(handler.logger, 'error');
249+
250+
const errorWithWarning = new Error('test warning error');
251+
(<any>errorWithWarning).logAsWarning = true;
252+
253+
handler.handle = sandbox.spy(() => {
254+
throw errorWithWarning;
255+
});
256+
257+
await rabbit.publish(this.name, { test: 'data' }, { correlationId: '5' });
258+
await new Promise(resolve => setTimeout(resolve, 100));
259+
260+
warnSpy.calledWith(errorWithWarning).should.be.true();
261+
errorSpy.calledWith(errorWithWarning).should.be.false();
262+
});
263+
264+
it('should log error as error when error does not have logAsWarning property set', async function () {
265+
const handler = new DemoHandler(this.name, rabbit, {
266+
retries: 0,
267+
retryDelay: 10
268+
});
269+
await handler.created;
270+
const warnSpy = sandbox.spy(handler.logger, 'warn');
271+
const errorSpy = sandbox.spy(handler.logger, 'error');
272+
273+
const normalError = new Error('test normal error');
274+
275+
handler.handle = sandbox.spy(() => {
276+
throw normalError;
277+
});
278+
279+
await rabbit.publish(this.name, { test: 'data' }, { correlationId: '6' });
280+
await new Promise(resolve => setTimeout(resolve, 100));
281+
282+
errorSpy.calledWith(normalError).should.be.true();
283+
warnSpy.calledWith(normalError).should.be.false();
284+
});
240285
});

ts/base-queue-handler.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,10 +129,12 @@ abstract class BaseQueueHandler {
129129
}
130130

131131
handleError(err, msg) {
132-
this.logger.error(err);
132+
this.logError(err);
133+
133134
if (msg.properties.headers === undefined) {
134135
msg.properties.headers = {};
135136
}
137+
136138
msg.properties.headers.errors = {
137139
name: err.name && err.name.substr(0, 200),
138140
message: err.message && err.message.substr(0, 200),
@@ -141,6 +143,14 @@ abstract class BaseQueueHandler {
141143
};
142144
}
143145

146+
logError(err) {
147+
if (err?.logAsWarning) {
148+
this.logger.warn(err);
149+
} else {
150+
this.logger.error(err);
151+
}
152+
}
153+
144154
getTime() {
145155
return new Date().getTime();
146156
}

0 commit comments

Comments
 (0)