2012-11-27 8 views
6

Pracuję nad ulepszaniem rejestrowania w niektórych aplikacjach node.js. W przeszłości używaliśmy C++ __ file__ i __ line __ makr preprocesora, aby pomóc nam w śledzeniu problemów podczas rejestrowania zdarzeń. Nie znalazłem nic podobnego do niego w świecie node.js.Czy plik node.js ma coś podobnego do __file__ i __line__ jak do makr preprocesora w języku C++?

Czy ktoś ma sugestie lub wie, w jaki sposób mogę uzyskać numer linii i nazwę pliku w pliku node.js do celów rejestrowania?

szukam czegoś podobnego:

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

Odpowiedz

7

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

Następnie do pliku:

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

Można też po prostu użyć process.argv[1] zamiast wywoływania __stack getter, ale chciałem zachować to podobnie.

2

wystarczy użyć C preprocesor, dodaje dodatkowy build krok do kodu, ale to pozwala stripping swoje rejestrowanie dla kod produkcyjny.

+1

Niezły pomysł. Nigdy o tym nie myślałem. –

4

Expanded na poprzednich odpowiedziach nieco się tutaj: https://gist.github.com/gavinengel/8572856

Umożliwia ustawienie globalnych: __line, __file, __ext, __dir

Nawiasem mówiąc, w jaki sposób tworzę ?: __function, __method, __class

+0

Dzięki za sedno. Powinieneś rozważyć zrobienie tego w module węzła, może to być miły moduł npm. – jeremy

+0

Sure. Właściwie to polecam sprawdzić ten kod, który właśnie zrealizowałem, był przez zespół PHPJS: https://github.com/kvz/phpjs/tree/master/experimental/language – Gavin

+4

Poszedłem i zrobiłem npm : https: //www.npmjs.com/package/magic-globals – Gavin

Powiązane problemy