我维护一个应用程序,当应用程序出现错误时会向我发送电子邮件。我将堆栈跟踪转储到电子邮件中,这似乎可以正常工作。唯一缺少的是变量的值。我可以获取所有调用等信息,但从未获取过任何变量。为了在电子邮件中转储变量值,我需要做什么?
以下是我用于将其转储到电子邮件中的代码:
UtilityClass.SendEmail(shortNTID,
"admin@mydomain.com",
new string[] { "support@mydomain.com" },
"MyApplication error has occured for user: " +
shortNTID + " (Main).",
"Message: " + ex.Message.ToString() +
" Source: " + ex.Source.ToString() +
" Target Site: " + ex.TargetSite.ToString() +
" Stack Trace: " + ex.StackTrace.ToString());
以下是邮件中的结果:
消息: 指定的转换无效。源: MyApplication 目标站点: Void FindFormAndActivate(MyApplication.MDIParentForm, System.String, System.Object) 堆栈跟踪: at MyApplication.UtilityClass.FindFormAndActivate(MDIParentForm frmMDIParentForm, String formName, Object parameter) at MyApplication.DashboardAlerts.NavigateToAssignment() at MyApplication.DashboardAlerts.utAlerts_MouseClick(Object sender, MouseEventArgs e) at System.Windows.Forms.Control.OnMouseClick(MouseEventArgs e) at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
编辑
一些答案建议我在邮件中自己添加变量值。但是,我应该如何获取这些值呢?发送电子邮件的代码片段不在发生错误的方法中。这是任何异常发生时运行的代码。如果异常没有被处理和纠正,我会让它冒泡到线程的顶部,类似于 Application.ThreadException += new ThreadExceptionEventHandler(HandleError);
并且 HandleError
方法是进行此邮件调用的方法。它不知道导致异常的方法的变量或参数是什么。