Skip to content

Commit 481d84c

Browse files
committed
Add function and filename to log
1 parent eeafc12 commit 481d84c

1 file changed

Lines changed: 49 additions & 1 deletion

File tree

OpenFlow/src/Logger.ts

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,32 @@ export class Logger {
1010
if (info instanceof Error || info.stack) {
1111
return `${info.timestamp} [${info.level}] ${info.message} \n ${info.stack}`;
1212
}
13-
return `${info.timestamp} [${info.level}] ${info.message}`;
13+
return `${info.timestamp} [${Logger.getLabel()}][${info.level}] ${info.message}`;
1414
});
15+
static getLabel = function () {
16+
let e = new Error();
17+
let frame = "";
18+
let lineNumber = "";
19+
let functionName = "";
20+
let filename = "";
21+
let arr = [];
22+
try {
23+
arr = e.stack.split("\n");
24+
arr = arr.filter(x => x.indexOf("node_modules") === -1)
25+
arr = arr.filter(x => x.indexOf("dist") !== -1)
26+
arr = arr.filter(x => x.indexOf("Logger.js") === -1)
27+
arr = arr.filter(x => x.indexOf("otel.js") === -1)
28+
frame = arr[0];
29+
lineNumber = frame.split(":").reverse()[1];
30+
functionName = frame.split(" ")[5];
31+
filename = frame.substr(frame.indexOf("("));
32+
filename = filename.replace("(", "").replace(")", "");
33+
filename = path.basename(filename)
34+
return functionName + " " + filename;
35+
} catch (error) {
36+
return "n/a";
37+
}
38+
};
1539
static configure(skipotel: boolean, skiplic: boolean): winston.Logger {
1640
const filename = path.join(Config.logpath, "openflow.log");
1741
const options: any = {
@@ -122,5 +146,29 @@ export class Logger {
122146
Logger._ofid = openflow_uniqueid;
123147
return openflow_uniqueid;
124148
}
149+
static getStackInfo(stackIndex) {
150+
// get call stack, and analyze it
151+
// get all file, method, and line numbers
152+
var stacklist = (new Error()).stack.split('\n').slice(3)
153+
154+
// stack trace format:
155+
// http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi
156+
// do not remove the regex expresses to outside of this method (due to a BUG in node.js)
157+
var stackReg = /at\s+(.*)\s+\((.*):(\d*):(\d*)\)/gi
158+
var stackReg2 = /at\s+()(.*):(\d*):(\d*)/gi
125159

160+
var s = stacklist[stackIndex] || stacklist[0]
161+
var sp = stackReg.exec(s) || stackReg2.exec(s)
162+
163+
if (sp && sp.length === 5) {
164+
return {
165+
method: sp[1],
166+
relativePath: path.relative(__dirname, sp[2]),
167+
line: sp[3],
168+
pos: sp[4],
169+
file: path.basename(sp[2]),
170+
stack: stacklist.join('\n')
171+
}
172+
}
173+
}
126174
}

0 commit comments

Comments
 (0)