使用 NLog 记录时修改异常数据
Posted
技术标签:
【中文标题】使用 NLog 记录时修改异常数据【英文标题】:Modify exception data while logging with NLog 【发布时间】:2016-02-14 22:40:04 【问题描述】:我的应用程序方法周围有一个全局 try/catch 来记录未处理的异常并显示错误消息。对于日志记录,我使用 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 但我无法访问异常引用。异常只能作为字符串传递。
【问题讨论】:
【参考方案1】:您是否可以使用 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);
【讨论】:
感谢您的回答。我也想到了这一点,但我必须为每个日志级别覆盖 15 个重载。我会记住这一点,但希望有一个更紧凑的解决方案。以上是关于使用 NLog 记录时修改异常数据的主要内容,如果未能解决你的问题,请参考以下文章
使用 NLog 在 ASP.NET Web API 2.1 中进行全局异常处理?