我们正在尝试使用 AOP(顺便说一句,还有 PostSharp,但这个问题与任何 AOP 框架相关)在我们的应用程序中实现日志记录。
我们面临的问题是我们得到的信息是这样的:
Entering method XXX with parameters:
- parameter content if it is a value type.
- anything in the ToString() override if it is done.
- classname if the ToString() is not overridden.
此信息不是很有用,因为通常我们得到的是第三种情况。我们还创建了很多无用的信息。
如果您使用 AOP 登录任何产品,您是如何解决这个问题的?
提前致谢。
最佳答案
几种方法:
在您要记录的类型上放置一个通用接口(interface)。 (例如,ILoggable)。实现该接口(interface)将使您的方面能够准确记录您想要的内容。缺点是您必须为可能记录的每个对象实现/维护 ILoggable。
使用反射(这是我在博客上的 audit example 中所做的。它使用 MVC ActionFilter,但原理是相同的)。博文中详细说明了权衡取舍,但基本上是使用反射和性能问题的复杂性,具体取决于您记录的日志量和频率。
使用序列化。给定一个对象,将其序列化为 Json 或 XML 或其他任何格式,并记录该字符串。根据您对日志所做的操作,这可能从完美到毫无值(value),并且根据序列化的工作方式和对象的复杂程度,这也可能是一个性能问题。
关于c# - AOP(面向方面的编程)和日志记录。它真的很实用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19784884/