0

我的一些网站在生产环境中运行不佳,有时崩溃,有时异常。由于这些网站真的很老,其中一些没有足够的日志来进行故障排除。我知道我可以一一添加代码以获得足够的日志,但这是巨大的工作量并且可能会影响现有的逻辑。

所以我想做的是: 在不修改任何现有产品代码的情况下,我们可以在运行时将代码附加或注入到网站进程中,然后我可以执行一些代码来记录异常、http 请求和 http 响应。我的环境是 Asp.net 4.0+ 和 IIS7+

如果我可以在产品过程中执行我的代码,那么在不修改产品代码的情况下登录会容易得多,代码将如下所示:

 AppDomain.CurrentDomain.FirstChanceException += (sender, e) =>
            {
                ///write log...
            };

unhandle exception 就是其中一种情况,我还有其他几种情况要应用于所有生产,例如:

  1. 记录所有请求和响应(我可以随时从远程管理系统启用日志和禁用登录)
  2. 记录未处理异常
  3. 日志吞入异常
  4. 得到一个转储
  5. 监控应用程序,一旦达到条件(例如异常计数、超时、内存使用)触发一些操作
  6. 当异常或意外返回值时打印所有堆栈(带有函数引用的参数和局部值)

有几个技术点我现在找不到解决方案...

4

2 回答 2

1

最简单的方法是向 IIS添加错误日志记录模块。

例如,请参阅SharpBrake,它有一个名为NotifierHttpModule的 IIS 模块,它可以自动捕获站点抛出的所有异常,而无需对站点代码进行任何修改。(您唯一需要做的就是在web.config文件中包含模块初始化。)您可以根据 SharpBrake 自己编写一些东西,或者...。

实际上,对于您正在做的事情,您可以考虑使用像AirBrake.io或它的免费开源克隆ErrBit这样的服务来进行日志记录,然后您可以使用 SharpBrake 进行错误捕获。

于 2013-06-07T02:49:53.963 回答
1

如果它是一个 Web 应用程序并且您正在处理未处理的异常,您可以将日志记录添加到 global.asax;它可能有帮助,也可能没有帮助,但似乎它会给你比目前更多的洞察力。

现在,从技术上讲,有人可以说修改 global.asax 就是修改生产代码,但我认为你的问题是说你不想去修改生产代码中的数百个地方等等。

于 2013-06-07T01:49:26.537 回答