什么是最好的方式来收集/报告意外错误。净窗口的应用程序?
-
02-07-2019 - |
题
我在寻找一个更好的解决方案比我们目前必须处理 意想不到的生产错误, ,没有重新发明轮子。
一个更大数量的产品WinForm和WPF应用安装在远程站点。不可避免地意外发生错误,从NullReferenceExceptions到大网络错误'.因此,从程序员的错误环境问题。
目前,所有这些未处理的例外情况记录使用log4net然后通过电子邮件发送回给我们 分析.然而,我们发现,有时这些错误'报告'包含的信息太少,以确定问题。
在这些报告中,我们需要的信息,例如:
- 应用程序的名字
- 应用版本
- 工作站
- 也许一个屏幕
- 异常的细节
- 操作系统
- 可RAM
- 正在运行的进程
- 等等...
我不真的想要重新发明轮子,通过发展这种从头开始。所必需的组件:
- 错误的收集(详情如上所述)
- 错误'送者'(排队所需的若DB或网络不可用)
- 错误的数据库
- 分析和报告的这些错误。E.g。10个最常见的错误或超时之间发生下午4:00和下午5:00.如何做的错误之间的比较版x和y?
注:我们看了 SmartAssembly 作为一个可能的解决方案,但尽管靠近它并没有完全满足我们的需求和希望听到什么其他的开发人员这样做,如果某些替代品的存在。
编辑: 谢谢你的答案为止。也许我不清楚我原来的问题,问题不是如何捕捉所有unhanded例外,而是如何处理它们,并创造一个报告引擎(分析)。
解决方案
我建议你杰夫*阿特伍德的文章 用户友好的例外处理, ,其中大部分你的要求已经(用的信息,截图,异常详细信息,操作系统,记录以文本文件和电子邮件),并包含的源代码,以便添加额外的东西你需要的。
其他提示
你可以连接到未经处理的异常事件和日志,这/打击一个服务。
[STAThread]
static void Main()
{
Application.ThreadException += new ThreadExceptionEventHandler(OnUnhandledException);
Application.Run(new FormStartUp());
}
static void OnUnhandledException(object sender, ThreadExceptionEventArgs t)
{
// Log
}
我还找到这段代码使用程序域,而不是ThreadException:
static class EntryPoint {
[MTAThread]
static void Main() {
// Add Global Exception Handler
AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(OnUnhandledException);
Application.Run(new Form1());
}
// In CF case only, ALL unhandled exceptions come here
private static void OnUnhandledException(Object sender,
UnhandledExceptionEventArgs e) {
Exception ex = e.ExceptionObject as Exception;
if (ex != null) {
// Can't imagine e.IsTerminating ever being false
// or e.ExceptionObject not being an Exception
SomeClass.SomeStaticHandlingMethod(ex, e.IsTerminating);
}
}
}
这里是一些文件: 程序域未处理的异常
外面只是处理它自己,没有一个通用的方式做到这一点,是可以重复使用的,它真正需要的综合与接口的应用程序正确,但你可以安装一个服务,需要应用程序的名称,例外,而且所有的好东西,有一个集中点,对于所有的应用程序。
你可能需要研究的错误报告功能建成JetBrain的 Omea读者.它有一个全面的错误处理成分的持久性有机污染物对话的时候意外发生错误。用户可以输入更多的细节之前提交的问题JetBrain的公共错-收集网服务。
他们Omea开放源允许的社区升级。净1.1码基v2或3。http://www.jetbrains.net/confluence/display/OMEA/this+link