在OO的哪个阶段添加日志记录和跟踪?

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

我正在使用.net堆栈和log4net(通过commons.logging)。 一般采用TDD方法进行开发,虽然不是100%,但有时我知道没有测试覆盖率就会突然出现。 我的应用程序都坐在服务器端,例如Web服务,消耗公共汽车消息的Windows服务,asp.net mvc business admin apps。 等等..

我发现自己在应用程序服务中使用描述性logger.INFO“从存储库获取蛋糕”来装饰方法。 一些工作..“从存储库中获得5个蛋糕。”,然后一个未处理的应用程序的表单处理程序doamin记录器.FATAL意想不到的冒泡泡沫。

但是,我通常最终会回到原点并在开发结束时应用这些技术,而不是在开发开始时应用这些技术,而我可能只需要一两个。 我发现我很少修饰任何较低级别的类,例如使用记录器实现ICakeRepository,因为它似乎毫无意义。

对于通过配置开启的跟踪,我正在考虑使用IOC框架拦截方法调用和实例创建,这应该考虑到现场麻烦而不是重度跟踪人群。


我的软件分层次,每层之间有一个定义良好的API。 我倾向于从开始实现这些API的日志记录,以便对于任何给定的事务,我可以看到如何导致每个底层的API调用:如果出现错误,这将有助于将其缩小到特定层。 通过显示导致问题的所有以前正常活动的日志,日志记录还将有助于重现问题。

我也可以在每层中添加断言,并记录断言失败。

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

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

我关于伐木的理由部分解释如下:

  • 单独的“调试”和“发布”版本?
  • 应该测试内部实现还是仅测试公共行为?
  • 为了解决已发布软件中的任何错误,我依赖于日志文件; 而且正在开发的软件也同样如此。


    你说,

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

    我说,

    我的软件分层次,每层之间有一个定义良好的API。 我倾向于从开始实施这些API的日志记录...

    我想我应该更好地解释我的意思是“图层”,它可能与您的“低级”课程相同或不同。

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

  • UI
  • 业务层(操作数据的规则)
  • 数据访问层(用于数据库I / O)
  • 数据库
  • 在这种情况下,我将拥有以下接口或API,它们可能值得记录:

  • 在用户和UI之间(即UI事件,鼠标和键盘)
  • 在用户界面和业务层之间(请参阅“谦虚对话框”)
  • 业务层和DAL之间
  • 在DAL和数据库之间
  • 或者,该系统可能是连接两个对等端点的组件链(不太明显与“顶层”和“底层”)。

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

  • 不太复杂(外观往往比底层/内部实现更简单)
  • 良好的覆盖率(如果我登录整个外观,并且如果组件的唯一途径是通过其外观,那么我知道我记录了进入组件的所有内容)
  • 适用于康威定律:当调试由多个组件组成的系统时,每个组件都由不同的团队开发,其中一个经常性问题是“哪个组件有问题,哪个团队需要调试?”

  • 我们是TDD,所以我们基本上不再做太多的日志记录。 也许只是在顶级异常处理程序和一些战略性的地方。


    记录和追踪应该是交叉担忧。 如果您使用面向方面的编程,您可以随时以声明方式添加/删除它们。

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

    上一篇: At what stage do you add logging & tracing in OO?

    下一篇: How to make div scale vertically all the way down?