Skip to content

Commit 06ed8ae

Browse files
cprussinmisterdjules
authored andcommitted
breaking: omit node domains from serializer (#95)
1 parent c4cf6c3 commit 06ed8ae

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

lib/serializer.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
var assert = require('assert-plus');
55
var _ = require('lodash');
66
var verror = require('verror');
7+
var domain = require('domain');
78
var safeJsonStringify;
89

910
// try to require optional dependency
@@ -154,6 +155,10 @@ function _getSerializedContext(err) {
154155
_.omit(err, self._knownFields) :
155156
{};
156157

158+
if (topLevelFields.domain instanceof domain.Domain) {
159+
topLevelFields = _.omit(topLevelFields, [ 'domain' ]);
160+
}
161+
157162
// combine all fields into a pojo, and serialize
158163
var allFields = _.assign({}, topLevelFields, err.context, verror.info(err));
159164

test/index.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
// core modules
77
var http = require('http');
8+
var domain = require('domain');
89

910
// userland
1011
var assert = require('chai').assert;
@@ -983,5 +984,45 @@ describe('restify-errors node module.', function() {
983984
var serializedErr = serializer.err(err1, 'oh noes!');
984985
assert.notInclude(serializedErr.stack, 'cause=undefined');
985986
});
987+
988+
it('should serialize domain when not using node domains', function() {
989+
var serializer = restifyErrors.bunyanSerializer.create({
990+
topLevelFields: true
991+
});
992+
var err1 = new Error('foo');
993+
err1.domain = 'bar';
994+
995+
logger.child({ serializers: serializer }).error(err1);
996+
997+
var serializedErr = serializer.err(err1, 'oh noes!');
998+
assert.include(serializedErr.stack, 'domain="bar"');
999+
});
1000+
1001+
// eslint-disable-next-line max-len
1002+
it('should not serialize domain when using node domains', function(done) {
1003+
var dom = domain.create();
1004+
dom.on('error', function(err1) {
1005+
var serializer = restifyErrors.bunyanSerializer.create({
1006+
topLevelFields: true
1007+
});
1008+
1009+
logger.child({ serializers: serializer }).error(err1);
1010+
1011+
var serializedErr = serializer.err(err1, 'oh noes!');
1012+
// This weird pattern is necessary to make mocha report failures
1013+
// correctly inside a domain context
1014+
try {
1015+
assert.notInclude(serializedErr.stack, 'domain=');
1016+
return done();
1017+
} catch (e) {
1018+
return done(e);
1019+
}
1020+
});
1021+
dom.run(function() {
1022+
process.nextTick(function() {
1023+
throw new Error('foo');
1024+
});
1025+
});
1026+
});
9861027
});
9871028
});

0 commit comments

Comments
 (0)