【问题标题】:Log client side errors to the server [duplicate]将客户端错误记录到服务器[重复]
【发布时间】:2011-02-19 00:26:12
【问题描述】:

可能重复:
Logging Clientside JavaScript Errors on Server

如何将客户端 javascript 错误记录到服务器?我正在使用 jQuery 和 MVC。

【问题讨论】:

  • 我目前正在使用 Elmah 日志框架。有没有办法将解决方案链接到这个?
  • 我最近发现了这个很好的托管解决方案:errorception.com
  • JSNLog (jsnlog.com) 允许您在 JavaScript 中记录客户端上的字符串和对象,并使用 Elmah 将它们存储在服务器上。您只需在安装 JSNLog 时指定 Elmah。
  • 如果您在自己的网站上使用 Google Analytics,记录客户端错误非常简单且免费:stackoverflow.com/a/52248397/455313

标签: javascript jquery asp.net-mvc error-handling


【解决方案1】:

由于它们是客户端错误,您必须使用 XMLHttpRequest 将它们发送到服务器。您可以使用try...catch 语句或window.onerror

window.onerror = function (msg, url, line)
{
    var message = "Error in "+url+" on line "+line+": "+msg;
    $.post("logerror.aspx", { "msg" : message }); 
}

请注意,lineurl 在 8 之前的 IE 版本中可能非常不准确。

【讨论】:

  • window.onerror = function(msg, url, line) 为我工作
  • 使用这种方法是否应该注意任何安全问题?
  • @Arman:无话可说。有人可以使用自定义消息伪造对logerror.aspx 的请求,但只要您的服务器端代码可靠,就没有攻击媒介。
【解决方案2】:

您可以使用我的log4javascript,它有一个使用XMLHttpRequest 登录到服务器的附加程序:

var log = log4javascript.getLogger("serverLog");
var ajaxAppender = new log4javascript.AjaxAppender("clientlogger.jsp");
log.addAppender(ajaxAppender);

try {
    nonExistentFunction();
} catch(ex) {
    log.error("Something's gone wrong!", ex);
}

【讨论】:

  • 感谢您的建议。您知道是否可以将其链接到 log4net ?
  • 手动操作很简单。 AjaxAppender 发送日志数据的默认方式是作为 HTTP 帖子,其参数表示日志事件的各个方面,例如消息、时间戳、严重性等。在服务器上,您将有一个页面或 HTTP 处理程序来接收post,并根据 post 参数进行 log4net 调用。
  • JSNLog (jsnlog.com) 开箱即用地为您完成所有这些工作。它由一个 JavaScript 日志库和一个服务器端 dll 组成,该 dll 从 JavaScript 库接收日志消息并将它们传递到服务器端记录器库,例如 Log4Net、NLog 或 Elmah。它允许您在 web.config 中配置 JavaScript 记录器。它具有各种功能,例如抑制重复消息、消息批处理和按浏览器类型过滤。
  • @user1147862:听起来不错。我故意不关注 log4javascript 中的服务器部分,所以这对于 .NET 开发人员来说似乎是一个有用的库。如果这个问题没有结束,我建议添加一个答案。
猜你喜欢
  • 1970-01-01
  • 2019-08-20
  • 2013-10-21
  • 1970-01-01
  • 2016-04-27
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
相关资源
最近更新 更多