抛出异常的最佳做法

Alv*_*vin 0 .net c# nlog

可能重复:
使用NLog记录异常时如何获取堆栈跟踪?

抛出异常以从日志中获取清晰图片的最佳做法是什么?

对于日志记录,我使用的是NLog.

以下是简单的代码:

catch (Exception ex)
{
    logger.Fatal(ex.Message);
    throw new Exception(ex.Message);
}
Run Code Online (Sandbox Code Playgroud)

它没有给我一个好的记录消息.我需要信息,如函数,错误代码行.

vit*_*ore 5

对于loggin目的,您要分析的不仅仅是异常对象的消息字段.

链接将为您提供有关可从通用Exception对象获取的内容的信息

此外,throw ex和之间存在差异throw.而且当你抛出新创建的异常时.

  • 在你的case(throw new Exception(ex.Message))中,你抛出了一个通用异常,它可以说明异常的本质,并且有新的堆栈跟踪,可以从这行代码构建.
  • throw ex - 重新抛出原始异常,但将stacktrace剪切为当前catch子句

  • throw - 使用原始堆栈跟踪重新抛出原始异常,允许您记录etc异常并让它更进一步

因此,根据您将要实现的目标,这三种情况中的一种将满足您的需求.