From c000193a5105994f549c8447ff0a38f685e0b5da Mon Sep 17 00:00:00 2001 From: Kanstantsin Kamkou Date: Mon, 22 Feb 2016 20:28:05 +0100 Subject: [PATCH] Allow to pass an Error object to the message field, closes #2 --- README.md | 5 ++++- lib/gelf-pro.js | 10 +++++++++- package.json | 12 ++++++------ test/tests.js | 17 ++++++++++++++++- 4 files changed, 35 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index e0ab11b..7cd97d8 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ The Graylog Extended Log Format. Pro - because of code-quality. ## Installation ``` "dependencies": { - "gelf-pro": "~0.2" + "gelf-pro": "~0.3" } ``` ```npm install gelf-pro``` @@ -39,6 +39,9 @@ log.info("Hello world", extra, function (err, bytesSent) {}); log.info("Hello world", function (err, bytesSent) {}); log.info("Hello world", extra); log.info("Hello world"); + +log.info('Oooops.', new Error('An error message')); +log.info(new Error('An error message')); ``` ### Levels diff --git a/lib/gelf-pro.js b/lib/gelf-pro.js index 6592504..18694ab 100644 --- a/lib/gelf-pro.js +++ b/lib/gelf-pro.js @@ -42,7 +42,7 @@ gelf.setConfig = function (conf) { }; /** - * Creates and return adapter + * Creates and return adapter (singleton) * @returns {Object} */ gelf.getAdapter = function () { @@ -119,6 +119,14 @@ gelf.send = function (message, cb) { extra = {}; } + // trying to convert an error to readable message + if (_.isError(message)) { + message = message.message.toString() || 'Error'; + } + if (_.isError(extra)) { + extra = {error: {message: extra.message, stack: extra.stack}}; + } + // creating string from object extra = this.getStringFromObject( _.merge( diff --git a/package.json b/package.json index afd4aa3..6020019 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gelf-pro", - "version": "0.2.0", + "version": "0.3.0", "main": "./lib/gelf-pro.js", "author": "Kanstantsin Kamkou ", "description": "The Graylog Extended Log Format for the Node.js", @@ -22,12 +22,12 @@ "test": "mocha" }, "dependencies": { - "lodash": "~3.10", - "async": "~1.4" + "lodash": "~4.5", + "async": "~1.5" }, "devDependencies": { - "should": "~7.1", - "mocha": "~2.3", - "sinon": "~1.16" + "should": "~8.2", + "mocha": "~2.4", + "sinon": "~1.17" } } diff --git a/test/tests.js b/test/tests.js index a43e213..0e54538 100644 --- a/test/tests.js +++ b/test/tests.js @@ -67,7 +67,7 @@ module.exports = { result.should.not.have.property('id'); }, - 'Extra fileds normalization': function () { + 'Normalize extra fields': function () { var mock = sinon.mock(console); mock.expects('warn').once().withExactArgs('the first value: the key format is not valid'); @@ -91,6 +91,21 @@ module.exports = { result.should.have.property('_level1_value1').equal('value1'); result.should.have.property('_level1_level2_value2').equal('value2'); result.should.have.property('_level1_level2_level3_value3').equal('value3'); + }, + + 'Transform an Error object': function () { + var gelf = _.cloneDeep(gelfOriginal), + err = new Error('Some error message'); + + sinon.spy(gelf, 'getStringFromObject'); + + gelf.info(err); + gelf.info('Example', err); + + JSON.parse(gelf.getStringFromObject.firstCall.returnValue) + .should.containEql({short_message: err.message.toString()}); + JSON.parse(gelf.getStringFromObject.lastCall.returnValue) + .should.have.properties(['_error_message', '_error_stack']); } },