AOP(面向方面​​编程)和日志记录.它真的有用吗?

Ign*_*cia 7 .net c# logging aop

我们正在尝试使用AOP在我们的应用程序中实现Logging(顺便提一下PostSharp,但这个问题与任何AOP框架有关).

我们面临的问题是我们获得的信息如下:

使用参数输入方法XXX:

  • 参数内容,如果它是值类型.
  • 如果完成,ToString()中的任何内容都会覆盖.
  • 如果未覆盖ToString(),则为classname.

这些信息不是很有用,因为通常我们得到的是第三种情况.我们还创造了许多非有用的信息.

如果您使用AOP登录任何产品,您是如何处理此问题的?

提前致谢.

Mat*_*ves 6

几种做法:

  • 在要记录的类型上放置一个通用接口。(例如,ILoggable)。实现该接口将使您的方面能够准确记录您想要的内容。缺点是您必须为可能记录的每个对象实现/维护 ILoggable。

  • 使用反射(这是我在我博客上的这个审计示例中所做的。它使用了一个MVC ActionFilter,但原理是一样的)。博文中详细说明了权衡,但基本上是使用反射和性能问题的复杂性,这取决于您记录的数量和频率。

  • 使用序列化。给定一个对象,将其序列化为 Json 或 XML 或其他任何内容,并记录该字符串。根据您对日志的处理方式,这可能从完美到毫无价值,并且根据序列化的工作方式和对象的复杂程度,这也可能是一个性能问题。

  • 谢谢。这些都是好点。最后我们放弃了 AOP 日志的使用,因为我们没有找到一种方法来完全取代标准日志,我们认为将两个日志系统合二为一是没有意义的。Anway 我以后会考虑前两点。谢谢! (2认同)