无论如何,要在远程进程中运行c#代码(例如:IIS)
本文关键字:运行 代码 IIS 例如 进程 程进程 无论如何 | 更新日期: 2023-09-27 18:17:15
我的一些网站在生产环境中不能很好地工作,有时崩溃,有时异常。由于这些网站真的很老,有些网站没有足够的日志来排除故障。我知道我可以逐个添加代码以获得足够的日志,但这是巨大的工作负载,可能会影响现有的逻辑。
所以我要做的是:无需修改任何现有产品代码,我们可以在运行时附加或注入代码到网站进程中,然后我可以执行一些代码来记录异常,HTTP请求和HTTP响应。我的环境是Asp.net 4.0+和IIS7+
如果我可以在产品过程中执行我的代码,那么在不修改产品代码的情况下记录日志将会容易得多,代码将像这样:
AppDomain.CurrentDomain.FirstChanceException += (sender, e) =>
{
///write log...
};
unhandle异常是其中一种情况,我还有几个其他的情况,我想应用到所有的生产,像:
- 记录所有请求和响应(可以启用日志和禁用登录)任何时间,从远程管理系统)
- 日志取消处理异常
- 日志吞食异常
- 获取转储文件
- 监控应用,一旦达到条件(例如:异常统计,超时,内存使用)触发一些动作
- 当异常或意外返回值时打印所有堆栈函数引用的参数和局部值)
有几个技术问题我现在找不到解决方案
如果这是一个web应用程序,并且你正在处理未处理的异常,你可以添加logging到global.asax;它可能有帮助,也可能没有帮助,但它似乎会给你更多的洞察力。
现在,从技术上讲,可以认为修改全局。asax正在修改生产代码,但我把你的问题的意思是你不想去修改生产代码等数百个地方
最简单的方法是在IIS中添加一个错误日志模块。
参见SharpBrake,它有一个名为NotifierHttpModule的IIS模块,可以自动捕获站点抛出的所有异常,而无需修改站点的代码。(您唯一需要做的就是在web.config
文件中包含模块初始化。)你可以自己写一些基于SharpBrake的东西,或者....
事实上,对于你正在做的事情,你可以考虑使用像AirBrake这样的服务。. io或它的免费开源克隆ErrBit做日志记录,然后你可以使用SharpBrake做错误捕获。