在try finally块中记录异常详细信息

时间:2013-07-02 08:50:23

标签: c# .net exception logging

我有一小段代码调用webservice客户端方法。

该方法返回一个消息数组作为out参数。这些消息通常包含已发生的任何错误的详细信息。当发生错误时,也会抛出异常。

我想记录消息,无论是抛出异常还是异常类型。登录finally块可接受的做法吗?

WebServiceClient client = GetWebServiceClient();
Console.WriteLine("Calling getUpdates...");
ItemStatus[] itemStatuses;
Message[] messages = null;
string outToken;
try
{
     outToken = client.getUpdates(inToken, out itemStatuses, out messages);
}
finally
{
     LogMessages(messages);
}

2 个答案:

答案 0 :(得分:6)

是的,将始终执行finally块(即使没有抛出异常)。因此,将Logging置于此上下文中是有意义的。

答案 1 :(得分:2)

无论是否抛出任何异常,都将始终执行finally块。

如果这是您的完整代码,那就没关系。如果没有,我建议在记录消息变量之前进行一些空检查,因为在抛出异常时它可能不会被初始化。

我认为这样的记录非常公平。

修改

我忘了提到有一些corner cases会阻止最终执行 - 我不相信这是你的情况,但值得一提(感谢Simon指出它!)。

此外,如果您希望方法记录,即使方法返回,我也喜欢finally方法。