2013-05-23 34 views
8

Kịch bản: Hãy xem xét tôi đang có nhiều phương thức thực hiện các tác vụ khác nhau và được xử lý bởi các nhà phát triển khác nhau. Tôi đang cố gắng để thực hiện một cuộc gọi phương thức chung mà các bản ghi nếu lỗi xảy ra. Vì vậy, nhu cầu là tôi phải ghi lại một dòng tên Không, Phương pháp, vv ..Cách lấy tên phương thức bên trong một phương thức node.js

Tôi đã viết một hàm tổng quát như sau:

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

Vì vậy, việc kêu gọi các phương pháp trên có để vượt qua nguồn tệp, tên phương thức và số dòng có thể thay đổi tại bất kỳ thời điểm nào trong quá trình phát triển.

Ví dụ: cho phương pháp gọi với giá trị mã hóa cứng:

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

Câu hỏi: Là nó tốt hơn để mã hóa cứng các giá trị (như trên chẳng hạn) yêu cầu hoặc là có cách nào để có được tên phương pháp & dòng không tham khảo từ bất kỳ cách nào trong Node.js?

+0

Kiểm tra các cuộc thảo luận tại đây: http://stackoverflow.com/questions/16324409/is-it-possible -for-a-javascript-chức năng-to-return-của nó-riêng-chức năng-gọi-as-a-st – NilsH

Trả lời

7

có một mô-đun tuyệt vời mà chúng tôi sử dụng trong ứng dụng-logger của chúng tôi. bạn thậm chí có thể lấy số dòng. https://npmjs.org/package/traceback

vì vậy bạn có thể viết lại nó như thế:

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

và chỉ cần gọi:

enterLog(); 

từ bất cứ nơi nào bạn muốn và luôn luôn nhận được kết quả chính xác

Edit: gợi ý khác. không mã hóa tên tệp của bạn là cách dễ dàng nhất để đạt được trong node.js mà không cần phụ thuộc vào bên thứ ba:

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

rất hữu ích .. Cảm ơn –

+0

bạn đang chào đón. một gợi ý khác không liên quan gì đến câu hỏi ban đầu của bạn: hãy xem xét việc truyền vào tệp nhật ký của bạn, vì fs.appendFile luôn cần phải mở tệp nhật ký của bạn, ghi vào nó và đóng tệp xử lý: http: // nodejs. org/docs/latest/api/fs.html # fs_fs_createwritestream_path_options – hereandnow78

+0

Có vẻ như đã xảy ra sự cố với ví dụ này ngay bây giờ. Tôi nhận được: /Users/chris/Desktop/Apps/repos/NetDb/Node.js/Node1/node_modules/traceback/lib/frame.js:26 frame.is_top = frame.isToplevel() ^ truy cập bất hợp pháp –

Các vấn đề liên quan