2012-11-27 11 views
6

Sto lavorando per migliorare la registrazione in alcune applicazioni node.js. In passato abbiamo utilizzato le macro di preprocessore __ file__ e __ line __ di C++ per aiutarci a rintracciare i problemi durante la registrazione degli eventi. Non ho trovato nulla di simile nel mondo node.js.node.js ha qualcosa come __file__ e __line__ come le macro del preprocessore C++?

Qualcuno ha suggerimenti o sa come posso ottenere il numero di riga e il nome del file in node.js per scopi di registrazione?

Sto cercando qualcosa di simile:

console.log(__FILE__ + "." + __LINE__ + "\t" + new Date().toISOString() + " Message "); 

risposta

7

See: Accessing line number in V8 JavaScript (Chrome & Node.js)

Poi per un nome di file:

Object.defineProperty(global, '__file', { 
    get: function(){ 
    return __stack[1].getFileName().split('/').slice(-1)[0]; 
    } 
}); 

Si potrebbe anche solo utilizzare il process.argv[1] invece di chiamare il __stack getter ma volevo tenerlo simile.

2

Basta usare il preprocesor C, aggiunge un passaggio di generazione in più per il vostro codice, ma poi permette escludendo la tua registrazione per codice di produzione.

+1

Non è una cattiva idea. Non ci ho mai pensato. –

4

Expanded sulle risposte precedenti un po 'in questa sede: https://gist.github.com/gavinengel/8572856

consente di impostare globali: __line, __file, __ext, __dir

A proposito, come creo ?: __function, __method, __CLASS

+0

Grazie per l'essenza. Si dovrebbe prendere in considerazione la possibilità di fare questo in un modulo nodo, potrebbe essere un bel modulo npm – jeremy

+0

Sure. In realtà, ti consiglio di consultare questo codice che ho appena realizzato dal team di PHPJS: https://github.com/kvz/phpjs/tree/master/experimental/language – Gavin

+4

Sono andato avanti e ho fatto un npm : https: //www.npmjs.com/package/magic-globals – Gavin

Problemi correlati