c# - .NET 中是否可以进行被动日志记录?

标签 c# .net asp.net vb.net .net-3.5

我经常对代码中必须包含的大量日志记录感到沮丧,这让我想知道是否有更好的做事方式。

我不知道这是否已经完成,或者是否有人提出了更好的主意,但我想知道是否有人知道有一种方法可以将记录器“注入(inject)”到应用程序中,以便它被动地监视线程并在流程发生时安静地记录流程,而无需执行以下操作:

public void MyProcess(int a, string b, object c)
{
  log(
    String.Format(
      "Entering process MyProcess with arguments: [a] = [{0}]; [b] = [{1}]; [c] = [{2}]",
      a.ToString(),
      b,
      c.ToString()
  );

  try
  {
    int d = DoStuff(a)
    log(
      String.Format(
        "DoStuff({0}) returned value {1}",
        a.ToString(),
        d.ToString()
      )
    );
  }
  catch (Exception ex)
  {
    log(
      String.Format("An exception occurred during process DoStuff({0})\nException:\n{1}",
      a.ToString(),
      ex.ToString())
    )
  }
}

如果我能对我的记录器说,那就太好了:

Monitor(MyClass.MyMethod)

然后它将监视该方法内部发生的所有事情,包括传入的参数以及方法调用和传递给这些方法的值、发生的异常等。

过去有没有人实现过类似的东西?它甚至可以实现吗?以这种方式登录只是一个白日梦吗?

我很想设计一些可以做到这一点的东西,但我什至不知道从哪里开始。当然,我也不想重新发明轮子,如果已经完成了,如果有人能指出我正确的方向就太好了。

如有任何建议,我们将不胜感激...

编辑:我想我会对一个询问日志中所需详细程度的答案发表评论。通常需要提供可配置的日志记录级别,这样如果配置指定了详细的日志记录,那么所有内容都会被记录下来,而如果配置了关键日志记录,那么只有某些信息会与异常一起被记录。如果配置了致命日志记录,则只会记录导致应用程序终止的信息。像这样的东西是可配置的还是 AOP 需要 3 或 4 个不同的构建,具体取决于日志记录级别的数量?

我经常使用 4 个级别:致命、严重、信息、详细

最佳答案

您可以使用 PostSharp记录“周围”的方法。这正是 AOP 擅长的事情。您可能想从 Log4PostSharp 开始- 专门用于日志记录的插件。

关于c# - .NET 中是否可以进行被动日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/687867/

相关文章:

c# - 为什么 C# 不允许我在不同的范围内使用相同的变量名?

c# - 如何检查 MemoryStream 是否可以在 .NET 中转换为位图?

asp.net - .Net Core 2.0 - 获取 AAD 访问 token 以与 Microsoft Graph 一起使用

c# - ASP.NET 中的可编辑 GridView

javascript - ASP 网站 IIS 将 '' < %'' javascript 字符解释为 ASP 代码

c# - 填充列表的通用方法无法创建 T()

c# - 刷子的径向扫描

c# - 独特的对集合

c# - 使用 Asp 中的 C# 数组在 javascript 中创建数组

c# - 暂停线程直到手动恢复