2013-05-23 10 views
8

परिदृश्य: मान लें कि मेरे पास विभिन्न कार्यों को करने और विभिन्न डेवलपर्स द्वारा संभाले जाने वाले कई तरीके हैं। मैं एक जेनेरिक विधि कॉल करने की कोशिश कर रहा हूं जो त्रुटि होने पर लॉग करता है। तो जरूरत है, इस प्रकार मैं एक लाइन नहीं है, विधि नाम, आदि लॉग इन करना है ..किसी विधि के अंदर विधि नाम कैसे प्राप्त करें node.js

मैं एक सामान्य समारोह लिखा है:

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); 
     }); 
    } 

तो, उपरोक्त विधि के लिए कॉल स्रोत पारित करने के लिए है फ़ाइल, विधि का नाम और रेखा संख्या जो विकास के दौरान किसी भी समय बदल सकती है।

उदा।

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

प्रश्न: हार्ड-कोडेड मूल्यों के साथ विधि फोन करने के लिए यह कड़ी मेहनत से कोड के लिए बेहतर मान (उदाहरण के ऊपर के रूप में) की आवश्यकता होती है या किसी भी तरह से विधि नाम & लाइन से कोई संदर्भ प्राप्त करने के लिए है Node.js में किसी भी तरह से?

+0

चेक चर्चाओं: हार्डकोड नहीं अपने फ़ाइल नाम सबसे आसान 3 पार्टी मॉड्यूल निर्भरता के बिना Node.js में प्राप्त करने के लिए है http://stackoverflow.com/questions/16324409/is-it-possible -for-a-javascript-function-to-return-its-own-function-call-as-a-st – NilsH

उत्तर

7

वहां एक अच्छा मॉड्यूल है जिसे हम अपने अनुप्रयोग-लॉगर में उपयोग करते हैं। आप लाइन नंबर भी ला सकते हैं। जहां भी आप चाहते से

enterLog(); 

और हमेशा सही परिणाम

संपादित मिलती है:: https://npmjs.org/package/traceback

ताकि आप उस जैसे कि यह फिर से लिखने सकता है:

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); 
    } 
    }); 
} 

और सिर्फ फोन एक और संकेत। यहाँ

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

बहुत उपयोगी .. धन्यवाद –

+0

आपका स्वागत है। एक और संकेत जो आपके मूल प्रश्न के साथ बहुत कुछ नहीं करना है: अपनी लॉग-फ़ाइल में स्ट्रीम करने के लिए विचार करें, क्योंकि fs.appendFile को हमेशा आपके लॉगफाइल को खोलने की आवश्यकता है, इसे लिखें और फ़ाइल-हैंडल बंद करें: http: // nodejs। संगठन/दस्तावेज़/नवीनतम/एपीआई/fs.html # fs_fs_createwritestream_path_options – hereandnow78

+0

ऐसा लगता है कि इस उदाहरण के साथ कुछ टूट गया है। मुझे मिलता है: /Users/chris/Desktop/Apps/repos/NetDb/Node.js/Node1/node_modules/traceback/lib/frame.js:26 frame.is_top = frame.isToplevel() ^ अवैध पहुंच –

संबंधित मुद्दे