如何讓New Relic記錄使用New Relic應用程序監視使進程崩潰的錯誤?我試圖完成的關鍵事項是有錯誤,這些錯誤會導致進程仍然記錄到,並且會通過某種方式將過濾到儀表板上的這些錯誤。使用New Relic在NodeJS中檢測進程崩潰
這裏是到目前爲止我的理解:
New Relic的他們每分鐘的雲傳輸數據。如果發生
uncaughtException
,這將導致當前等待傳輸的所有數據都將丟失。有一個
newrelic.noticeError()
這應該採取第二個參數,允許您傳遞一個錯誤的自定義參數。新文物獲取錯誤,但不包含自定義參數。
簡單的例子:
var newrelic = require("newrelic");
var express = require("express");
var app = express();
app.get("/softFail/", function(req, res) {
res.send(500, "softFail");
});
app.get("/hardFail/", function(req, res) {
setImmediate(function() {
throw new Error("I failed");
});
});
app.listen(80);
process.on("uncaughtException", function(err) {
console.error("Uncaught Exception");
console.error(err.stack);
newrelic.addCustomParameter("crash", "true");
newrelic.noticeError(err);
console.log("sending errors to New Relic");
newrelic.agent.harvest(function() {
console.log("send complete, crashing process");
process.exit(1);
});
});
使用的代碼塊,如果我叫/爲hardfail /我能夠獲得New Relic的至少記錄錯誤。沒有uncaughtException
處理程序我沒有得到任何新的遺物。問題是我無法區分導致進程崩潰的錯誤和正常的HTTP 500錯誤。
這裏的東西的事情我已經試過:
如果我嘗試添加
{ crash : true }
到noticeError
調用它似乎並沒有產生任何影響。我試過做
domain
而不是process.on
,這並沒有改變這種情況。如果我試圖改變錯誤的
name
,如err.name = "CrashError"
那麼錯誤根本不會被傳輸。如果我創建一個自定義錯誤類型,然後新建一個,並將堆棧跟蹤複製到它,它仍然報告爲
Error
而不是我的新錯誤類型的prototype.name
。
謝謝!我錯過了「收穫」的號召,你幫了我很多! – Pedro
有沒有解決方法?你是如何得到它的工作? – kfiroo
不幸的是,我們永遠無法找到解決方案。實際上,我們停止使用Newrelic的應用程序監視來支持Loggly。它使錯誤日誌和處理日誌更容易。 – Nucleon