gpt4 book ai didi

c# - NLog - 同时抛出异常和日志消息

转载 作者:行者123 更新时间:2023-11-30 21:39:38 33 4
gpt4 key购买 nike

我有以下方法,它在开头包含验证检查。我正在使用 NLog我想记录异常消息并“同时”抛出异常,尽可能避免代码膨胀。

目前,我执行以下操作,但看起来有点笨重。有没有更好的办法?

public static void ValidateValue(string value)
{
if (!string.IsNullOrWhiteSpace(value) && value.Contains(","))
{
ArgumentException ex = new ArgumentException(string.Format("value cannot contain ',': {0}", value));
Logger.Error(ex);
throw ex;
}
}

我正在寻找的更多是

public static void ValidateValue(string value)
{
if (!string.IsNullOrWhiteSpace(value) && value.Contains(","))
throw Logger.Error<ArgumentException>("value cannot contain ',': {0}", value);
}

哪里Logger.Error<>方法返回 ArgumentException在它记录消息之后。

这看起来很有用并且可能已经存在,但也许我必须推出自己的扩展方法?

谢谢!

最佳答案

不推荐在同一个地方记录和抛出异常,因为:

  • 对于同一个错误,您可以获得多个日志(在多个级别上)
  • 您可能会忘记记录异常

我会推荐以下内容:

  • 在高层捕获异常并将它们记录在那里(通用)
  • 只记录不会(重新)抛出的异常
  • 在不记录它们时添加上下文信息,我使用以下助手:

    public static TException SetContextData<TException>(this TException exception, object key, object value) 
    where TException : Exception
    {
    exception.Data[key] = value;
    return exception;
    }

    用法:

    throw ex.SetContextData("someContext", 123)
    .SetContextData("anotherId", 133);

    使用 NLog,您可以按如下方式记录异常数据:

    ${exception:format=toString,Data:maxInnerExceptionLevel=10}

关于c# - NLog - 同时抛出异常和日志消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45098775/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com