我有一个全局尝试/捕获我的应用程序方法来记录未处理的异常并显示错误消息。对于日志记录,我使用NLog。如果我处理异常并手动记录,我会设置一个密钥'记录'在例外数据对象中,以防止第二个日志来自全局try / catch。
public partial class App : Application
{
public static void Main(string[] args)
{
try
{
// Application stuff
SomeMethod();
}
catch (Exception ex)
{
if (ex.Data['logged'] == false)
{
logger.Error(ex, "A unhandled exception occured.")
ex.Data['logged'] = true;
}
// Show error dialog
}
}
public static void SomeMethod()
{
try
{
// Method stuff
}
catch (Exception ex)
{
logger.Error(ex, "A handled exception occured.")
ex.Data['logged'] = true;
throw;
}
}
}
我想简化流程,以便我不必手动拨打ex.Data['logged'] = true;
。有没有办法在使用NLog登录时自动修改异常的数据属性?我尝试使用MethodCall
- Target但我无法访问异常引用。该异常只能作为字符串传递。
答案 0 :(得分:0)
您是否可以使用NLog来修改您稍微记录异常的方法?
public partial class App
{
private static Logger logger = NLog.LogManager.GetCurrentClassLogger();
public static void Main(string[] args)
{
try
{
SomeMethod();
}
catch (Exception ex)
{
logger.ErrorEx(ex, "message");
}
}
public static void SomeMethod()
{
try
{
// Method stuff
}
catch (Exception ex)
{
logger.ErrorEx(ex, "A handled exception occured.");
throw;
}
}
}
public static class NLogExt
{
public static void ErrorEx(this NLog.Logger logger, Exception ex, string message)
{
if (ex.Data["logged"] as bool? == true) return;
logger.Error(ex, message);
ex.Data.Add("logged", true);
}
}