NLog - 同时抛出异常和日志消息
NLog - Throw exception and log message at the same time
我有以下方法,其中包括开头的验证检查。我正在使用 NLog
,我想记录异常消息并抛出异常 'at the same time',尽可能避免代码膨胀。
目前,我在做以下操作,但看起来有点笨重。有没有更好的方法?
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<>
方法 returns 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}
我有以下方法,其中包括开头的验证检查。我正在使用 NLog
,我想记录异常消息并抛出异常 'at the same time',尽可能避免代码膨胀。
目前,我在做以下操作,但看起来有点笨重。有没有更好的方法?
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<>
方法 returns 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}