0

C# 开发:我正在使用不同参数的 try catch 块中调用 Web 服务/其他方法,其中一些参数可能是自定义对象。请评论在发生异常时将参数记录在文本文件中的最佳方式。也可以从对象中跳过某些字段(例如,如果对象包含我不想记录到文本文件的图像文件)

谢谢你的时间

4

3 回答 3

0

简短的回答是,你不能,而不是不经过圈套。

当您收到异常时,它包含堆栈跟踪信息,但该信息不包含有关当时传递给方法的参数的任何内容。

为了解决这个问题,您必须将参数存储在异常处理程序代码中,以便在处理异常时可以访问它们。

例如,您将拥有一个对象,将参数实例传递给(连同它们的名称),然后在您的 catch 块中调用该对象的方法。

于 2009-03-23T17:00:05.023 回答
0

您可以为您的对象提供一个 to_string 方法,该方法可以根据需要显示它们。如果你想聪明一点,你甚至可以让他们第一次给出完整的细节,然后在以后的使用中参考完整版本(以免你的日志变得难以阅读)。

如果他们没有一个好名字作为参考,你可以给他们分配一些东西(比如“AxilWidget #7”或“PendingWhackQueue #14”)。

在许多情况下,这可以使日志更易于阅读,如果您要使用循环递归地序列化对象结构,这一点至关重要。如果对象在报告之间可能发生显着变化,您将必须特别小心 - 比如说始终包含包含这些成员的摘要,即使在反向引用中也是如此。

于 2009-03-23T17:02:09.323 回答
0

我建议您查看PostSharp。您可以使用属性声明您希望某些代码“围绕”正常方法执行。该代码可以使用该方法的参数,并且可以确保仅在原始代码引发异常等情况下才记录它。

这种横切关注点正是 AOP 的设计目的。我不知道 PostSharp 与 Web 服务的工作情况如何,但我无法想象你是第一个想要这个的人。

您将能够向属性添加属性以指定要跳过的任何参数等。

于 2009-03-23T17:30:09.007 回答