WPF-Caliburn.Micro-NLog 处理应用程序域上的异常
您好,我尝试使用 NLog 在应用程序域上记录expcetion。它是带有 Caliburn Micro 的 WPF 应用程序。
在 MEF 引导程序中,我有以下代码:
static readonly ILog Log = LogManager.GetLog(typeof(NLogLogger));
#region Constructors
public MefBootStrapper()
: base()
{
_msgBox = new MessageBoxes();
_doHandle = true;
}
static MefBootStrapper()
{
LogManager.GetLog = type => new NLogLogger(type);
}
#endregion
#region Exception handling on App Domain
protected override void OnUnhandledException(object sender,
System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
if (_doHandle)
{
Log.Error(e.Exception.InnerException);
_msgBox.ShowException(e.Exception.InnerException);
e.Handled = true;
}
else
{
Log.Error(e.Exception.InnerException);
_msgBox.ShowException(e.Exception);
e.Handled = false;
}
}
#endregion
当我运行应用程序并从视图模型类抛出异常时,它会显示消息框,但异常不会记录到文件中。
我尝试在视图模型调用中记录异常:
如下所示: Log.Error(new Exception("4"));
这项工作有效,但是如果我尝试在 OnUnhandleException 方法中记录异常,它不会工作。为什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的问题是静态字段
Log
在静态构造函数运行之前被初始化,请参阅(静态字段初始化)。因此,您的Log
字段将初始化默认的 Caliburn Nulloger,而不是 NLogLogger。您应该将 Log 字段初始化移至静态构造函数中。Your problem is that the static field
Log
gets initialized before your static constructor runs see (Static field initialization). So you will have yourLog
field with the default Caliburn Nulloger initialized instead of your NLogLogger. You should move the Log field initialization into your static constructor.