【发布时间】:2014-08-11 19:59:42
【问题描述】:
我的项目中使用任何外部资源(数据库、Web 服务调用等)的每个方法都必须进行日志记录。问题是我最终得到了很多以某种方式重复的代码。句子看起来一样,但它们的参数发生了变化(即方法名称)。
这似乎是重构我的代码的好点。除了 AOP 库之外,我想知道如何至少避免使用魔法字符串并编写一次性对象并将方法体包装在 using 语句中,如下所示:
public void LoggedMethod(int param)
{
using (new AutoLog())
{
// do whatever needs to be done
}
}
我的AutoLog 类将是一次性的,它将在实例化和处置时写入日志调用。我知道我可能会(ab)为此使用 StackTrace 类,但是 AFAIK 这会大大减慢我的方法,因为这个特定的类非常缓慢。
我的日志条目应该是(当然都包含方法名称):
- 方法调用的开始
- 方法调用结束
- (可选)方法参数 - 当然是序列化的(JSON?)
- (可选)执行时间
问题
我应该如何实现我的AutoLog 类以尽可能快地工作?如果我还可以读取方法参数那就更好了,这样我就可以将它们序列化并记录它们。
【问题讨论】:
-
为什么不使用 Proxy 或 Decorator 模式来实现所需的功能?您可以编写自己的实现,也可以使用 Castle Project Dynamci 代理。
标签: logging reflection automation aop idisposable