Skip to content

Commit fb16c39

Browse files
committed
Merge pull request #6 from alexk-blackops/master
source method fix
2 parents 7815498 + d0b7a4a commit fb16c39

File tree

3 files changed

+28
-13
lines changed

3 files changed

+28
-13
lines changed

lib/error.js

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ var url = require('url'),
22
os = require('os'),
33

44
helpers = require('./helpers'),
5+
exc = require('./exception'),
56
CONFIG = require('../config/config'),
67

78
// object that contains all the errors and their numbers logged during the current minute
@@ -39,15 +40,29 @@ module.exports = {
3940
return errorStorage[min][key] <= CONFIG.MSG.MAX_DUP_ERROR_PER_MINUTE;
4041
},
4142

42-
// getting source method and source method line of code
43-
getStackTraceItem: function getStackTraceItem(err) {
44-
var trace = helpers.getTrace(err);
45-
return {
46-
SrcMethod: trace[0].Method,
47-
SrcLine: trace[0].LineNum
48-
};
43+
// getting source method and source method line of code, not_direct is a flag indicating if the message was sent via direct logger
44+
getStackTraceItem: function getStackTraceItem(err, not_direct) {
45+
var trace = helpers.getTrace(err),
46+
result = {},
47+
lastElement = trace[trace.length - 1];
48+
49+
if (not_direct && !exc.excCaught) {
50+
if (lastElement.CodeFileName === 'module.js') {
51+
result.SrcMethod = trace[trace.length - 2].Method;
52+
result.SrcLine = trace[trace.length - 2].LineNum;
53+
} else {
54+
result.SrcMethod = lastElement.Method;
55+
result.SrcLine = lastElement.LineNum;
56+
}
57+
} else {
58+
result.SrcMethod = trace[0].Method;
59+
result.SrcLine = trace[0].LineNum;
60+
}
61+
62+
return result;
4963
},
5064

65+
5166
// create the exception details object
5267
formatEx : function formatEx(err, req, msg) {
5368
var trace = helpers.getTrace(err),

lib/helpers.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ module.exports.getTrace = function getTrace(err) {
9494
trace.forEach(function (val) {
9595
var method = val.methodName || (val.functionName || val.typeName) + '.<anonymous>';
9696

97-
if (val.fileName ? (val.fileName.search('lib/logger.js') < 0 && val.fileName.search('stackify') < 0) : true) {
97+
if (val.fileName ? (val.fileName.search('winston-stackify') < 0 && val.fileName.search('stackify-logger') < 0) : true) {
9898
result.push({
9999
CodeFileName: val.fileName,
100100
LineNum: val.lineNumber,

lib/logger.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,9 @@ module.exports.storage = storage;
7272

7373
module.exports.methods = {
7474
// create the message object, push it to the queue if the queue cap isn't exceeded
75-
push : function push(level, msg, meta, req) {
76-
var err = new Error(),
77-
getStack = error.getStackTraceItem(err),
75+
push : function push(level, msg, meta, req, err) {
76+
var stackError = err || new Error(),
77+
getStack = error.getStackTraceItem(stackError, err),
7878
messageObject = {
7979
Msg: msg,
8080
Level: level.toUpperCase(),
@@ -106,7 +106,7 @@ module.exports.methods = {
106106

107107
// if error object isn't passed with message & duplicate errors cap per minute isn't exceeded, create a string exception
108108
if (level.toLowerCase() === 'error' && !messageObject.Ex) {
109-
messageObject.Ex = error.formatEx(err, null, msg);
109+
messageObject.Ex = error.formatEx(stackError, null, msg);
110110

111111
if (!error.checkErrorLimitMessage(messageObject.Ex)) {
112112
delete messageObject.Ex;
@@ -139,7 +139,7 @@ module.exports.methods = {
139139
};
140140

141141
clearTimeout(timeout);
142-
this.push('error', err.message, [err], req);
142+
this.push('error', err.message, [err], req, err);
143143
check();
144144
},
145145
// drain the queue and send the messages before server closes

0 commit comments

Comments
 (0)