通过.NET桌面应用程序发送错误日志

时间:2010-04-08 08:32:54

标签: c# logging error-logging

最近我们的客户遇到意外崩溃。我们已经在本地计算机上记录错误。当应用程序崩溃或发生意外行为时,是否有一种机制可以让它们以某种方式“发送错误日志”?

换句话说,我怎么知道应用程序冻结或挂起或崩溃所以我可以发送一些内容,并覆盖正常的“无响应”窗口消息?

2 个答案:

答案 0 :(得分:2)

我不认为如果它被挂起你可以做很多事情,但是如果它崩溃了你可能能够用UnhandledExceptionEventHandler捕获一些崩溃。

您可以通过检查应用程序何时启动,如果它先前正确关闭并向日志写入“关闭”消息来处理挂起,如果没有,您可以询问用户是否要发送记录给你。

答案 1 :(得分:1)

在过去,我很幸运能够使用下面的代码将异常记录到Web服务中(只要允许客户端登录到Internet)。这是用于记录您尚未捕获的任何内容。如果您在发布模式下编译应用程序但也包含pdb文件,您将获得一个包含行号的堆栈跟踪。

您还应该记录程序集的版本,以了解应用程序的哪个版本会给您带来错误。

public void RegisterHandlers()
{
    Application.ThreadException += new ThreadExceptionEventHandler(ThreadExceptionFunction);
    Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionFunction);
}

private void UnhandledExceptionFunction(object sender, UnhandledExceptionEventArgs args)
{
    Exception e = (Exception)args.ExceptionObject;
    ExceptionLogger(e.StackTrace);
}

private void ThreadExceptionFunction(object sender, ThreadExceptionEventArgs args)
{
    ExceptionLogger(args.Exception.StackTrace);
}

private void ExceptionLogger(string trace)
{
    // log the message to a webservice
}