记录改变实施?

时间:2009-12-18 14:06:36

标签: c# asp.net logging log4net aop

我们一直使用log4net来记录我们的asp.net Web表单应用程序。我们的日志记录通常在我们的业务层中,典型的实现就像这样

SomeMethodCall(MethodParams)
{
  Log.Start("Starting Some Method");
  try
  {
   //do something
  }
  catch(Exception ex)
  {
    Log.Exception("exception in SomeMethodCall" + ex.message);
  }

  Log.End("End SomeMethod");
}

在我看来,它有点笨拙。有没有一种更简洁的方法可以不使用AOP?我不确定是否需要增加一个框架的开销,只是为了记录,我想我会理解它会给我很多其他的选择(我这样做)不需要)

我正在考虑使用一些AOP框架以更清洁的方式执行它,只需使用属性标记方法来记录和处理异常。

我关注AOP有两件事(在我最初的阅读之后)。

有些框架会将代码注入您的IL(根据我的理解)并担心是否会误导我。我可能正在查看由我的AOP框架给出的第x行,因为它实际上可能是我的应用程序中的第y行。我的恐惧没有根据吗?

性能:如果使用AOP框架,将增加多少性能开销。

编辑:我也在调查PolicyInjectionApplicationBlock。不幸的是,我没有在业务逻辑中改变实现的奢侈品

2 个答案:

答案 0 :(得分:2)

您可以阅读 this ,同时阅读 7 approaches for AOP in .Net ,我在Java中使用AOP,但我没有看到性能问题。无论如何 check here to be careful...

其他
Spring.Net AOP

答案 1 :(得分:2)

您是说大多数/所有方法都采用这种结构吗?如果是这样,我的建议是降低您的日志记录。 (我强调这是建议,也可能是有争议的建议。)

实际上不需要以这种方式使用每个方法的进入和退出的一揽子日志,而是更有策略地放置您的日志条目。我想确保所有日志消息都有“目的” - 如果我想不出那个日志消息在调试时会以某种方式帮助或帮助我的情况,那么它的代码中没有任何业务!