使用NLog进行日志记录时修改异常数据

本文关键字:修改 异常 数据 记录 日志 NLog 使用 | 更新日期: 2023-09-27 18:21:57

我的应用程序方法有一个全局try/catch,用于记录未处理的异常并显示错误消息。对于日志记录,我使用NLog。如果我处理一个异常并手动记录它,我会在异常数据对象中设置一个键"logged",以防止第二个日志出现在全局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,但无法访问异常引用。异常只能作为字符串传递。

使用NLog进行日志记录时修改异常数据

使用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);
    }
}