.NET:记录没有AOP的入口/出口?

我希望能够记录代码执行何时进入方法,然后退出,我想知道是否有人有任何意见,以实现这一目标的最佳方式?

我知道在运行时存在注入日志代码的AOP方式,但我希望有更多的控制权,PostSharp似乎是一种薪酬框架。

你会在这里推荐什么样的日志记录,我会认为DEBUG。

关于记录时间呢? 该方法进入vs退出需要多长时间

我很想知道别人在这里做什么以及你正在使用什么框架。

我正在寻找与log4net。

我正在考虑的日志记录是参数和方法的名称和参数的值,退出时我正在考虑记录我返回的对象的值,如果返回任何东西..

其他人在做什么?

提前致谢


那么,你当然可以创建一个“一次性记录器”,可以“自动”记录你选择的方法的信息:

public class EnterExitLogger : IDisposable
{
  Logger logger;
  string name;

  public EnterExitLogger(Logger logger, string name, params object [] args)
  {
    this.logger = logger;
    this.name = name;
    this.logger.Debug("Entering {0}", this.name);
    int i = 0;
    foreach (var a in args)
    {
      this.logger.Debug("arg[{0}] = {1}", i, a);
      i++;
    }
  }

  public void Dispose()
  {
    this.Logger.Debug("Exiting {0}", this.name);
  }
}

然后像这样使用它:

public class MyClass
{
  private static readonly Logger logger = LogManager.GetCurrentClassLogger();

  public void SomeMethod(int x, int y)
  {
    using (new EnterExitLogger(logger, "SomeMethod", x, y))
    {
      //Do your work here
    }
  }
}

这并不意味着我是一个特别好的主意,我怀疑我会自己做。 另一方面,它可以在不使用AOP的情况下实现某种形式的输入/输出记录。 如果你真的想要“自动”进入/退出日志记录,我不知道如何实现它没有AOP或企业库的版本(谁的名字逃脱我)。

显然,在我建议的解决方案中创建和部署EnterExitLogger会有一些开销,但是对于您来说可能还不够。


如果您不想使用PostSharp(尽管有免费版本)或生成了运行时代理,那么称为Afterthought的静态编织有一个开源替代方案。

或者,您可以使用其中一个分析工具。 VS Ultimate有一个内置的。

链接地址: http://www.djcxy.com/p/95175.html

上一篇: .NET: Logging entry / exit without AOP?

下一篇: Centralising logging using Spring AOP