无论如何在远程进程中运行C#代码(例如IIS)

时间:2013-06-07 01:45:29

标签: c# asp.net .net iis

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

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

如果我可以在产品流程中执行我的代码,那么在没有修改产品代码的情况下更容易记录,代码将会是这样的:

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

unhandle例外是其中一个案例,我还有其他一些案例,我想申请所有制作,例如:

  1. 记录所有请求和响应(我可以启用日志并禁用登录 任何时候,来自远程管理系统)
  2. 记录未处理异常
  3. log swallowed exception
  4. 获得转储
  5. 监控应用程序,一旦达到条件(例如异常计数, 超时,内存使用)触发一些动作
  6. 在异常或意外返回值时打印所有堆栈(使用 函数引用的参数和本地值)
  7. 有几个技术点我现在找不到解决方案......

2 个答案:

答案 0 :(得分:1)

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

现在,从技术上讲,人们可以争辩说修改global.asax正在修改生产代码,但我提出你的问题意味着你不想去修改生产代码中的数百个地方等。

答案 1 :(得分:1)

最简单的方法是将模块的错误记录添加到IIS。

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

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