fix(#252): stacktraces in different vm context

This commit is contained in:
Gareth Jones 2017-07-26 08:54:25 +10:00
parent 3488bd9df8
commit 78d9e3568e
2 changed files with 32 additions and 1 deletions

View File

@ -30,7 +30,7 @@ const semver = require('semver');
function wrapErrorsWithInspect(items) {
return items.map((item) => {
if ((item instanceof Error) && item.stack) {
if (util.isError(item) && item.stack) {
return {
inspect: function () {
return semver.satisfies(process.version, '>=6') ? util.format(item) : `${util.format(item)}\n${item.stack}`;

View File

@ -0,0 +1,31 @@
'use strict';
const test = require('tap').test;
test('Stacktraces from errors in different VM context', (t) => {
const log4js = require('../../lib/log4js');
const recorder = require('../../lib/appenders/recording');
const layout = require('../../lib/layouts').basicLayout;
const vm = require('vm');
log4js.configure({
appenders: { vcr: { type: 'recording' } },
categories: { default: { appenders: ['vcr'], level: 'debug' } }
});
const logger = log4js.getLogger();
try {
// Access not defined variable.
vm.runInNewContext('myVar();', {}, 'myfile.js');
} catch (e) {
// Expect to have a stack trace printed.
logger.error(e);
}
const events = recorder.replay();
// recording appender events do not go through layouts, so let's do it
const output = layout(events[0]);
t.match(output, 'stacktraces-test.js');
t.end();
});