在现代Web开发中,日志记录是监控和诊断应用程序问题的关键工具。服务器端日志记录已经相当成熟,但客户端日志记录仍然是一个挑战。JSNLog项目旨在提供一个与服务器端日志系统集成的客户端日志记录解决方案。本文将概述JSNLog项目的发展,并征求反馈,以了解这是否对有用,以及如何改进。
客户端日志记录与服务器端日志记录非常相似,例如使用Log4Net或NLog等包。使用JSNLog这样的客户端日志记录包,可以在JavaScript代码中创建记录器,并在发生有趣的事情时使用它们来写入日志消息。可以设置严重性级别来管理哪些记录器是活动的,使用附加器来存储日志消息等。例如:
JL("clientsidelogger").error("Something interesting happened");
一个主要的区别是客户端日志消息需要通过互联网发送到服务器进行存储,这会增加服务器的负载。引入JSNLog的原因之一是使管理这种负载变得更加容易。
在客户端拥有可靠的无错误代码与在服务器端拥有同样重要(如果怀疑,请询问经理或客户)。不幸的是,客户端编程在这里提出了一些挑战:
无论编程多么谨慎,或者部署前测试多么彻底,都无法保证生产代码中没有错误。随着时间的推移,减少生产错误的可靠方法之一是使用日志记录:
try {
// ...
} catch (err) {
JL().fatalException("something went wrong!", err);
}
window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {
JL("onerrorLogger").fatalException({
"msg": "Exception!",
"errorMsg": errorMsg,
"url": url,
"line number": lineNumber,
"column": column
}, errorObj);
return false;
};
if (shouldBePositive < 0) {
throw "shouldBePositive is negative!";
}
为了更容易地解决客户端代码中的异常,请在代码中引入额外的记录器以获取更多信息。通常这些记录器是禁用的 - 只有在需要时才会启用。
function DoSomething(a, b, c) {
JL("DoSomething").trace("a=" + a + ", b=" + b + ", c=" + c);
// ...
}
有了这一切,有很好的机会发现生产错误并解决它们,以免它们导致尴尬的错误报告或愤怒的经理。
已经有很多客户端日志记录包。然而,它们往往存在以下问题: