您在什么阶段在OO中添加日志记录和跟踪?

6 logging log4net trace

我对您的开发中的哪个阶段添加日志记录和/或跟踪到您的应用程序感兴趣?

我正在使用.Net堆栈和log4net(通过commons.logging).一般采用TDD方法进行开发虽然不是100%,但有时我知道在没有测试覆盖率的情况下飙升.我的应用程序都在服务器端,例如Web服务,消费总线消息的Windows服务,asp.net mvc业务管理应用程序.等等..

我发现自己在我的应用服务中使用描述性的logger.INFO"从存储库中获取蛋糕"来装饰方法.一些工作......"从存储库中获得了5个蛋糕.",然后是一个未处理的expcetion处理程序,用于appger doamin到logger.FATAL,用于意外的消息,它会冒出来.

然而,我通常最终会回到开发阶段而不是在开发开始时应用这些,而我可能只有十几个.我发现我很少装饰任何较低级别的类,例如使用logger东西实现ICakeRepository,因为它似乎毫无意义.

对于通过配置打开的跟踪,我正在考虑使用IOC框架拦截方法调用和实例创建,这应该考虑到现场故障而不是繁重的跟踪人口.

Chr*_*isW 2

我的软件是分层的,每层之间都有明确定义的 API。我倾向于从一开始就为这些 API 实现日志记录,这样对于任何给定的事务,我都可以看到它如何在每个底层调用 API:如果出现错误,这将有助于将范围缩小到特定层。日志记录还可以通过显示导致问题的所有先前正常活动的日志来帮助重现问题。

\n\n

我还在每一层中尽可能添加断言,并记录断言失败。

\n\n

因此,日志文件通常会显示对公共 API 的一系列调用,并从内部生成一条错误消息:这通常足以诊断问题。

\n\n

除此之外,我根据需要添加调试级别日志记录:在开发期间和/或发布后调试特定问题。

\n\n

我关心日志记录的原因部分解释如下:

\n\n\n\n

为了修复已发布软件中的任何错误,我依赖于日志文件;对于正在开发的软件来说也是如此。

\n\n
\n\n

你说,

\n\n
\n

我发现我很少装饰任何较低级别的类,例如使用记录器内容实现 IMakeRepository,因为它似乎毫无意义。

\n
\n\n

我说,

\n\n
\n

我的软件是分层的,每层之间都有明确定义的 API。我倾向于从一开始就为这些 API 实现日志记录......

\n
\n\n

我想我最好解释一下“层”的含义,它可能与您的“较低级别”课程相同,也可能不同。

\n\n

例如,我的系统可能具有以下层:

\n\n
    \n
  • 用户界面
  • \n
  • 业务层(操作数据的规则)
  • \n
  • 数据访问层(用于数据库 I/O)
  • \n
  • 数据库
  • \n
\n\n

在这种情况下,我将拥有以下接口或 API,它们可能值得记录:

\n\n
    \n
  • 用户和 UI 之间(即 UI 事件、鼠标和键盘)
  • \n
  • UI和业务层之间(参见“不起眼的对话框”)
  • \n
  • 业务层和DAL之间
  • \n
  • DAL 和数据库之间
  • \n
\n\n

或者,系统可能是连接两个对等端点的组件链(“顶层”和“底层”不太明显)。

\n\n

无论如何,我记录的是每个组件的公共外观的 API,这有利于记录,原因如下:

\n\n
    \n
  • 不太复杂(外观往往比底层/内部实现更简单)
  • \n
  • 良好的覆盖范围(如果我记录整个外观,并且进入组件的唯一方法是通过其外观,那么我知道我已经记录了进入组件的所有内容)
  • \n
  • 非常符合康威定律:在调试具有多个组件(每个组件由不同团队开发)的系统时,经常出现的问题之一是“哪个组件出现故障,因此哪个团队需要调试它?”
  • \n
\n