2012-03-04 30 views
17

Tìm kiếm một gói Node.js để xử lý đống truy tìm tương tự như cách này được thực hiện trong RoR:Làm thế nào để đăng nhập dấu vết ngăn xếp trong Node.js

Rails: Logging the entire stack trace of an exception

+0

"Gói theo dõi ngăn xếp" trong Rails bạn đang nói đến? –

+0

Tôi đã cập nhật câu hỏi để thêm liên kết. –

+0

Bản sao có thể có của [Cách in dấu vết ngăn xếp trong Node.js?] (Http://stackoverflow.com/questions/2923858/how-to-print-a-stack-trace-in-node-js) –

Trả lời

31

Bạn có thể nhận được văn bản này tắt của .stack tài sản từ bất kỳ lỗi nào. Ví dụ:

try { 
    throw new Error(); 
} catch (e) { 
    console.log(e.stack); 
} 

hoặc chỉ new lên một lỗi nhằm mục đích nhận được stack trace

console.log(new Error().stack) 
+0

Ohh rất đẹp :) –

+0

Nó sẽ cần phải là '(new Error()). stack'. 'new Error(). stack' sẽ nhận' Error(). stack' và sau đó cố gắng xây dựng thứ gì đó từ nó – Kayla

+4

không, điều đó không đúng trong js toán tử '' new'' luôn được ưu tiên. – Benja

7

có một chức năng cho rằng: console.trace()

Trong trường hợp bạn không muốn đăng nhập vào bảng điều khiển, bạn có thể nhận được giá trị chuỗi theo dõi ngăn xếp bằng cách sử dụng new Error().stack

+0

Tôi không có ý tưởng rằng phương pháp tồn tại .. Tôi sẽ cung cấp cho một thử! –

+0

Ya, nhưng nếu bạn cần phải .. iono .. vượt qua nó xung quanh, hoặc làm điều gì đó với nó? Các chức năng giao diện điều khiển được gọi là "trợ giúp" chức năng cho một lý do - họ chỉ để bạn có thể thực sự lười biếng trong trường hợp cụ thể;) –

+0

nghe có vẻ như "lớn nếu" dựa trên câu hỏi ban đầu, nhưng hãy để tôi cập nhật cho điều đó. – Benja

0

Kiểm tra callsite, điều này lấy sta ck đối tượng để bạn có thể sử dụng nó bất kỳ cách nào bạn thích (và như một đối tượng, chứ không phải là một chuỗi). Nó khá tuyệt vời, đẹp và đơn giản. Kiểm tra this để biết thêm thông tin về cách chơi với ngăn xếp

Có một vài logger xuất sắc cho Node.js, nhưng tôi đã tạo một trình ghi nhật ký kết quả đầu ra đơn giản, màu và theo dõi ngăn xếp ngắn gọn. Nó không ghi đè lên console.log, mà tôi thấy là tiện dụng. Nếu bạn quan tâm, bạn có thể tìm thấy nó here, node-logger.

+0

Điều này thực sự tuyệt vời - Tôi sẽ kiểm tra. –

+0

Việc triển khai callite phù hợp với đề xuất từ ​​@Benja. –

5

Nếu bạn sử dụng winston, bạn có thể thêm này:

winston = require('winston'); 

logger = expandErrors(new winston.Logger()); 

logger.info(new Error("my error")); 

// Extend a winston by making it expand errors when passed in as the 
// second argument (the first argument is the log level). 
function expandErrors(logger) { 
    var oldLogFunc = logger.log; 
    logger.log = function() { 
    var args = Array.prototype.slice.call(arguments, 0); 
    if (args.length >= 2 && args[1] instanceof Error) { 
     args[1] = args[1].stack; 
    } 
    return oldLogFunc.apply(this, args); 
    }; 
    return logger; 
} 

và sau đó bạn sẽ có được logger với đống dấu vết winston. Cũng có trong a gist.

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