c# - AOP(面向方面​​的编程)和日志记录。它真的很实用吗?

标签 c# .net logging aop

我们正在尝试使用 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/

相关文章:

c# - Properties.Settings.Default 存储在哪里?

asp.net-mvc-3 - IIS 最大工作进程设置为 1,但会产生更多进程?

c++ - 使用 log4cxx 记录 C++ 中的特定类

c# - 正则表达式匹配文件路径字符串的数字结尾

c# - 如何在c++中的activemq mapmessage中设置消息组id

c# - 压缩 WCF 的所有流量

c# - 如何将这个字符串拆分成 Dictionary<string,string>?

.net - 如何在 VS2008 中实现对自定义 DLR 语言的智能感知支持?

logging - 是否有错误消息的行业标准?

c# - 在 .NET 3.5 中使用 NATUPNPLib 时缺少程序集引用