2012-12-17 125 views
1

我有一个关于如何设计错误处理的通用问题。我想在我的代码中使用一些第三方服务。通常我将服务包装在客户端类中。然后,我的其他代码只处理我的客户端类,并且对真正的服务视而不见。我的客户端类有一些记录错误的机制。但它不想捕捉和处理来自服务的任何异常。理想情况下,它应该忽略异常处理并让异常传播到外部。但是,如果我想记录异常,我必须这样做:发生异常时记录日志吗?

try{ 
    .... // call 3rd party service; 
}catch(Exception e){ // e is triggered from the service; 
    Log.error("Oops, an error: " + e); // shall I log the exception?? 
    throw e; // don't swallow the exception; 
} 

一方面,我不想这样做。我可以忽略异常的处理和记录。让我的客户端类的调用者处理异常或记录错误。问题是,我应该在什么时候记录异常,什么时候不应该?我想听听一些常见的做法和原则。谢谢。

+0

这是哪一种语言? –

+0

Java是语言, – Steve

回答

1

不要在每个级别都记录异常。只记录在“最高”级别。将其记录在不记录日志的地方会导致异常被错过。

+0

简单指南。可能不适用于任何地方,但这是我正在寻找的东西。 – Steve

0

这取决于你。我的建议是在它们指出真正意想不到的情况时记录异常。当然,名称“例外”似乎表明,情况总是如此,但不一定。

有时,代码会针对未曾想到的情景返回异常。

有时候,代码调用其他代码,知道它会在某些情况下调用异常,但是这组异常是“OK”。

有时候,一个异常表明真的发生了一些意想不到的事情,而这通常是一件坏事。那时你应该记录它,或者更好,确保你的代码大声抱怨。

0

如果触发异常的机率相当低,我看不到而不是来记录它。不记录异常来帮助调试的唯一原因是它是否持续触发。如果你有一个有这个特性的异常,那么我建议你编写你的代码,这样你就不会有异常不断被触发。

tl; dr:异常(希望)是罕见的,所以记录它们。

+0

但记录他们_where_?在每一种方法?我知道Java使用检查的异常,所以在Java中也许是有意义的,但在C#等语言中这是一个可怕的想法。 –

+0

我承认你的观点。 – AVP