65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 JSNLog 将 JavaScript 异常包含在服务器端日志中

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.94/5 (21投票s)

2013 年 9 月 15 日

CPOL

2分钟阅读

viewsIcon

54122

JSNLog 允许您在客户端 JavaScript 中插入记录器,在 web.config 中配置它们,并将它们的消息存储在您的服务器端日志中。

将 JavaScript 异常日志记录与您的服务器端日志集成。

引言

JSNLog JavaScript 日志记录包是 Log4Net、NLog、Elmah 等的 JavaScript 对应物。它允许您在 JavaScript 代码中插入记录器。它会自动将日志消息发送到服务器端组件,然后将其插入到您现有的服务器端日志中。它支持 Log4Net、NLog、Elmah 和 Common.Logging。

因为它具有合理的默认配置设置,您可以在安装 JSNLog Nuget 包后立即开始记录日志。

它有很多选项,从 JavaScript 异常的堆栈跟踪到关联消息的请求 ID,以及减少日志消息数量的各种过滤器。您还可以记录到浏览器控制台,因此不再需要用 console.log 语句来弄乱您的代码。所有这些都可以在您的 web.config 或 JavaScript 中进行配置。

为什么以及如何

您的网站由在服务器上运行的 C#/VB 代码和在浏览器上运行的 JavaScript 组成。

当您的 C#/VB 代码中发生异常时,您会记录它,以便您可以修复错误。

使用您的服务器端日志记录包,例如 Log4Net、NLog 或 Elmah,通过 web.config 配置记录器。

try
{
    ....
}
catch (Exception e)
{
    ILog log = LogManager.GetLogger("serverlogger");
    log.Fatal(e.ToString());
}

但是您的 JavaScript 代码中的异常呢?

try
{
    ....
}
catch(err)
{
    ????
}

使用 JSNLog 在客户端上记录 JavaScript 异常,它将其发送到服务器。

JSNLog 将把 JavaScript 异常日志消息及其堆栈跟踪传递给您的服务器端日志记录包,这样它就会出现在您的服务器端日志中。您可以记录额外的信息,例如变量的值。

try
{
    ....
}
catch(e)
{
    // Log the exception, complete with stack trace
    JL("jsLogger").fatalException({ "msg": "something went wrong!", "variable1": variable1, ... }, e);
}

或者使用 window.onerror 处理程序来捕获所有未捕获的异常

window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {
    JL("onerrorLogger").fatalException({
        "msg": "something went wrong!", 
        "errorMsg": errorMsg, "url": url, 
        "line number": lineNumber, "column": column
    }, errorObj);
        
    return false;
}

关于 JavaScript 异常日志记录的更多信息

优点

  • 广泛的 文档。易于安装。
  • 无需向第三方日志记录服务支付费用。
  • JavaScript 日志消息与您的服务器端日志消息进入相同的日志。
  • 或者将 JavaScript 日志消息发送到浏览器控制台。
  • 使用一个小的 JavaScript 库,可以作为 AMD 模块或简单的 script 标签加载,或者作为 捆绑包的一部分。
  • 请求 ID 将同一用户会话生成的 JavaScript 日志消息和服务器端日志消息关联起来。
  • 在您的 web.config 中配置 JavaScript 记录器。
  • 许多过滤选项可以防止您的服务器被 JavaScript 日志消息淹没。
  • 选择以 2 个或更多批次发送 JavaScript 日志消息以提高效率。
  • 记录 JSON 对象以及字符串。

下一步

如果您喜欢这篇文章,请投票支持它。

© . All rights reserved.