2013-05-23 11 views
8

Scenariusz: Rozważę, że mam wiele metod wykonywania różnych zadań i obsługiwanych przez różnych programistów. Próbuję wykonać ogólne wywołanie metody, które rejestruje, jeśli wystąpi błąd. Więc potrzeba muszę zalogować Linii imię Nie, Method, etc ..Jak uzyskać nazwę metody wewnątrz metody node.js

napisałem funkcję rodzajowy, jak następuje:

function enterLog(sourcefile, methodName, LineNo) 
    { 
      fs.appendFile('errlog.txt', sourcefile +'\t'+ methodName +'\t'+ LineNo +'\n', function(e){ 
      if(e) 
       console.log('Error Logger Failed in Appending File! ' + e); 
     }); 
    } 

więc wezwanie do powyższej metody musi przejść źródło plik, nazwa metody i numer linii, które mogą ulec zmianie w dowolnym momencie podczas programowania.

E.g. za wywołanie metody z zakodowane wartości:

enterLog('hardcodedFileName.js', 'TestMethod()', '27'); 

Pytanie: Czy lepiej twardym kod wartości (jak wyżej przykład) wymagane lub jest jakiś sposób, aby uzyskać nazwę metody & linii nr referencyjny z w jaki sposób w Node.js?

+0

sprawdzić dyskusji tutaj: http://stackoverflow.com/questions/16324409/is-it-possible -do-javascript-function-to-return-its-own-function-call-as-a-st – NilsH

Odpowiedz

7

jest tam ładny moduł, którego używamy w naszej aplikacji-rejestratorze. możesz nawet pobrać numer linii. https://npmjs.org/package/traceback

więc można przerobić go tak:

var traceback = require('traceback'); 

function enterLog(sourcefile, methodName, LineNo) { 
    var tb = traceback()[1]; // 1 because 0 should be your enterLog-Function itself 
    fs.appendFile('errlog.txt', tb.file +'\t'+ tb.method +'\t'+ tb.line +'\n', function(e) { 
    if(e) { 
     console.log('Error Logger Failed in Appending File! ' + e); 
    } 
    }); 
} 

i po prostu zadzwoń:

enterLog(); 

od gdziekolwiek chcesz i zawsze uzyskać poprawne wyniki

Edycja: Kolejna podpowiedź. hardcoding nazwa pliku nie jest najłatwiejszy do osiągnięcia w node.js bez 3rd-partyjnych-module-zależnościami:

var path = require('path'); 
var currentFile = path.basename(__filename); // where __filename always has the absolute path of the current file 
+0

bardzo pomocna .. Dzięki –

+0

nie ma za co. inna podpowiedź, która nie ma wiele wspólnego z twoim pierwotnym pytaniem: weź pod uwagę strumień do twojego pliku logu, ponieważ fs.appendFile zawsze musi otworzyć twój logfile, napisz do niego i zamknij uchwyt pliku: http: // nodejs. org/docs/latest/api/fs.html # fs_fs_createwritestreamream_path_options – hereandnow78

+0

Wygląda na to, że teraz coś jest zepsute. Otrzymuję: /Users/chris/Desktop/Apps/repos/NetDb/Node.js/Node1/node_modules/traceback/lib/frame.js:26 frame.is_top = frame.isToplevel() ^ nielegalny dostęp –

Powiązane problemy