假设我有一些这样的应用程序代码:
public void DoSomething()
{
if (SomethingBad)
throw new SomethingBadException("You did something bad");
// Keep going...
}
我正在使用 log4net,理想情况下我想记录该异常,但需要注意以下几点:
- 我现在想记录异常,而不是依赖调用者来记录它
- 我想使用此类拥有的 Logger 记录异常,以便记录器名称正确
- 我不希望SomethingBadException 了解日志记录,因为有时我想记录这种特定的异常类型,而有时我不想。我还想对内置异常类型使用相同的模式,例如 NotSupportedException
- 我想要一个可重用的模式,其中异常/日志语句不太复杂,因为我将有很多这样的。如果这涉及创建一个可以完成大部分工作的实用程序类,那很好。
- 我想记录包括调用堆栈在内的异常,这意味着它必须在抛出后记录。在构造异常之后但在它被抛出之前记录它,在日志输出中给我一个空的调用堆栈。
我已经能够编写一些实用程序代码来完成大多数项目符号,但是最后一个涉及捕获调用堆栈的代码让我望而却步。
有没有办法完成所有这些?我愿意编写自定义 log4net 扩展。如果有帮助,我还使用 Ninject 的 log4net 扩展来构建记录器。
我在吠叫错误的树吗?有没有另一种方法可以让我到达我想去的地方?