有的朋友刚刚完成了一个应用程序的执行情况和他们所使用自定义异常。有件事让我注意的是,当一个自定义异常升高,他们记录的例外,他们实施的异常基类的代码。所以我的问题将是,这是一个很好的设计方法?我的想法是,测井帮手更可用

 public class BaseCustomException: System.Exception
{

   public BaseCustomException()
   {
              TightlyCoupledClass.Log(this);
   }

}
有帮助吗?

解决方案

我了解他们在付诸实施的这使他们可以保证只要CustomException的抛出一个异常日志记录发生的思维;然而,这绝对臭代码。

这是例外,应该只用于异常和执行该代码的代码,可能导致CustomException抛出应该能够决定如何处理该异常,以及是否要记录它...因为日志应具体到在其被引起的场景。

一个侧面说明,自定义异常应该从ApplicationException的继承为根,这样就可以告诉我们,如果例外是自定义你的业务库或从.NET框架本身。结果 --CORRECTION--我刚刚发现这个帖子我不知道,基本上使用渲染ApplicationException的无用的。

其他提示

没有,这是IMO可怕的方法。的原因是,所述假设是,每个所创建的异常将被抛出,这绝对不是这样的。

由于通常例外是只读,存在一个异常将用于特定情况来创建实现中,并在必要时重新抛出(CLR的设置当抛出异常,而不是当构造堆栈跟踪)。

底线,这是不常见,但它有可能产生异常时,不扔了,你不应该基于该作假设。

我不这么认为。我设置会写异常(和其它数据)到日志一个全球性的异常处理程序。这样,你只写捕获的异常。

此溶液太紧密耦合,和不可配置的。我会建议使用一个更健壮的异常处理框架,比如企业库异常处理应用程序块

在构造函数中日志记录是一般肮脏的。要不然怎么是试图应该构建一个有意义的消息,可能包括异常的操作的代码?例外的作用是代表问题,无法登录的消息。一些其他的代码应该照顾的是使每一个可以捕获特定的异常部分可以做他们想要的东西,这可能会或可能不会涉及记录例外。

在日志构造内的情况下,如果异常被包裹并再次抓住重新抛出,异常将被记录两次,这是哑。

catch ( CustomException exception ){
Logger.error( "Really useful message", exception );
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top