如何在 JavaScript 中记录异常

新手上路,请多包涵

作为一名 C# 开发人员,我习惯了以下异常处理方式:

 try
{
    throw SomeException("hahahaha!");
}
catch (Exception ex)
{
    Log(ex.ToString());
}

Output
------

SomeNamespace.SomeException: hahahaha!
    at ConsoleApplication1.Main() in ConsoleApplication1\Program.cs:line 27

它真的很简单,但告诉我我需要知道的关于异常是什么以及它在哪里的一切。

我如何在 JavaScript 中实现等效的东西,其中异常对象本身可能只是一个字符串。我真的很想知道发生异常的确切代码行,但是以下代码根本没有记录任何有用的信息:

 try
{
    var WshShell = new ActiveXObject("WScript.Shell");
    return WshShell.RegRead("HKEY_LOCAL_MACHINE\\Some\\Invalid\\Location");
}
catch (ex)
{
    Log("Caught exception: " + ex);
}

Output
------

Caught exception: [object Error]

编辑(再次):澄清一下,这是针对大量使用 JavaScript 的内部应用程序。我正在寻找一种从生产系统中可能捕获的 JavaScript 错误中提取有用信息的方法——我已经有了一个日志记录机制,只需要一种获取合理字符串进行记录的方法。

原文由 Justin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 243
2 个回答

您几乎可以以相同的方式使用,即。

 try
{
    throw new Error("hahahaha!");
}
catch (e)
{
    alert(e.message)
}

但是,如果您想获取引发错误的行号和文件名,我想没有跨浏览器解决方案。消息和名称是错误对象的唯一标准属性。在 mozilla 中,您还有 lineNumber 和 fileName 属性。

原文由 Eldar Djafarov 发布,翻译遵循 CC BY-SA 2.5 许可协议

您不指定您是在浏览器中工作还是在服务器中工作。如果是前者,则有一个新的 console.error 方法和 e.stack 属性:

 try {
    // do some crazy stuff
} catch (e) {
    console.error(e, e.stack);
}

请记住,错误将在 Firefox 和 Chrome 上运行,但它不是标准的。一个将降级到 console.log 并记录 e 如果没有 e.stack 的快速示例:

 try {
    // do some crazy stuff
} catch (e) {
    (console.error || console.log).call(console, e.stack || e);
}

原文由 Nacho Coloma 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏