我正在尝试使用未处理的异常处理程序,但它似乎没有做任何事情。我必须在构造函数中跟随:
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);
而且这个更进一步
static void MyHandler(object sender, UnhandledExceptionEventArgs args)
{
Exception e = (Exception)args.ExceptionObject;
if (log != null)
{
if (args.IsTerminating)
log.LogError(e.Message, e.Source, e.InnerException.Message);
else
log.LogWarning(e.Message, e.Source, e.InnerException.Message);
}
else
{
System.Reflection.Assembly exe = System.Reflection.Assembly.GetEntryAssembly();
string exeDir = System.IO.Path.GetDirectoryName(exe.Location);
File.WriteAllText(DocuPath.Join(exeDir, "Emergency.log"), e.ToString());
}
}
log是一个静态对象,用于处理对文件的记录。为什么我在对象写入的日志文件或Emergency.log中都没有收到消息?
答案 0 :(得分:2)
如果e.InnerException
为null,则此方法中会出现异常
我不认为在这里遇到这个问题是个好主意。
试试这个。
string innerMessage = e.InnerException != null ? e.InnerException.Message : string.Empty;
if (args.IsTerminating)
log.LogError(e.Message, e.Source, innerMessage);
else
log.LogWarning(e.Message, e.Source, innerMessage);