Эх сурвалжийг харах

avoid reporting the same error object more than once

Brian Gough 8 жил өмнө
parent
commit
3676f78ff9

+ 6 - 0
libraries/logger/logging-manager.coffee

@@ -19,6 +19,9 @@ module.exports = Logger =
 			attributes = {err: new Error(attributes)}
 			attributes = {err: new Error(attributes)}
 		# extract any error object
 		# extract any error object
 		error = attributes.err or attributes.error
 		error = attributes.err or attributes.error
+		# avoid reporting errors twice
+		for key, value of attributes
+			return if value instanceof Error && value.reportedToSentry
 		# include our log message in the error report
 		# include our log message in the error report
 		if not error?
 		if not error?
 			error = {message: message} if typeof message is 'string'
 			error = {message: message} if typeof message is 'string'
@@ -50,6 +53,9 @@ module.exports = Logger =
 			# send the error to sentry
 			# send the error to sentry
 			try
 			try
 				@raven.captureException(error, {tags: tags, extra: extra, level: level})
 				@raven.captureException(error, {tags: tags, extra: extra, level: level})
+				# put a flag on the errors to avoid reporting them multiple times
+				for key, value of attributes
+					value.reportedToSentry = true if value instanceof Error
 			catch
 			catch
 				return # ignore any errors
 				return # ignore any errors
 
 

+ 15 - 0
libraries/logger/test/unit/coffee/loggingManagerTests.coffee

@@ -1,3 +1,6 @@
+# run this with 
+# ./node_modules/.bin/mocha --reporter tap --compilers coffee:coffee-script/register test/unit/coffee/loggingManagerTests.coffee
+
 require('coffee-script')
 require('coffee-script')
 chai = require('chai')
 chai = require('chai')
 should = chai.should()
 should = chai.should()
@@ -24,6 +27,18 @@ describe 'logger.error', ->
 		@logger.error {foo:'bar'}, "message"
 		@logger.error {foo:'bar'}, "message"
 		@captureException.called.should.equal true
 		@captureException.called.should.equal true
 
 
+	it 'should report the same error to sentry only once', () ->
+		error1 = new Error('this is the error')
+		@logger.error {foo: error1}, "first message"
+		@logger.error {bar: error1}, "second message"
+		@captureException.callCount.should.equal 1
+
+	it 'should report two different errors to sentry individually', () ->
+		error1 = new Error('this is the error')
+		error2 = new Error('this is the error')
+		@logger.error {foo: error1}, "first message"
+		@logger.error {bar: error2}, "second message"
+		@captureException.callCount.should.equal 2
 
 
 	it 'for multiple errors should only report a maximum of 5 errors to sentry', () ->
 	it 'for multiple errors should only report a maximum of 5 errors to sentry', () ->
 		@logger.error {foo:'bar'}, "message"
 		@logger.error {foo:'bar'}, "message"