繁体   English   中英

NLog-同时引发异常和日志消息

[英]NLog - Throw exception and log message at the same time

我有以下方法,其中包括开始时的验证检查。 我正在使用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} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM