无论如何,要在远程进程中运行c#代码(例如:IIS)

本文关键字:运行 代码 IIS 例如 进程 程进程 无论如何 | 更新日期: 2023-09-27 18:17:15

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

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

如果我可以在产品过程中执行我的代码,那么在不修改产品代码的情况下记录日志将会容易得多,代码将像这样:

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

unhandle异常是其中一种情况,我还有几个其他的情况,我想应用到所有的生产,像:

  1. 记录所有请求和响应(可以启用日志和禁用登录)任何时间,从远程管理系统)
  2. 日志取消处理异常
  3. 日志吞食异常
  4. 获取转储文件
  5. 监控应用,一旦达到条件(例如:异常统计,超时,内存使用)触发一些动作
  6. 当异常或意外返回值时打印所有堆栈函数引用的参数和局部值)

有几个技术问题我现在找不到解决方案

无论如何,要在远程进程中运行c#代码(例如:IIS)

如果这是一个web应用程序,并且你正在处理未处理的异常,你可以添加logging到global.asax;它可能有帮助,也可能没有帮助,但它似乎会给你更多的洞察力。

现在,从技术上讲,可以认为修改全局。asax正在修改生产代码,但我把你的问题的意思是你不想去修改生产代码等数百个地方

最简单的方法是在IIS中添加一个错误日志模块

参见SharpBrake,它有一个名为NotifierHttpModule的IIS模块,可以自动捕获站点抛出的所有异常,而无需修改站点的代码。(您唯一需要做的就是在web.config文件中包含模块初始化。)你可以自己写一些基于SharpBrake的东西,或者....

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