@@ -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 = / a t \s + ( .* ) \s + \( ( .* ) : ( \d * ) : ( \d * ) \) / gi
158+ var stackReg2 = / a t \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