Java API设计中面向对象的事件记录

时间:2016-02-17 14:55:34

标签: java android design-patterns logging business-intelligence

我想解决这个问题:

大多数应用都有一些日志记录服务,用于将应用程序中的事件报告给商业智能分析数据库。此外,像Android这样的移动应用程序会报告用户行为等相同的内容。有很多库可以做到这一点。

问题:当开发人员想要在其代码中添加日志记录时,通常会通过散布代码行来报告其方法中的内容,例如:

      void doStuff() {
         try {
             doTheThing():
             logger.info("the thing was done", someClientInfoDTO, timestamp, eventid);
            } catch(Throwable woops) {
                logger.error(woops);
            }

           }

我在各种形式中都看到这种模式。我想采用面向对象的方法来记录日志,因此可以使用日志记录行为来注释类。消除了开发人员只需坚持记录代码行的需要,他们就会发现重要的日志记录正在发生。

我的想法是重写上面这样的代码:

@Logger("class level logger")
class StuffDoer {
    @Logger("what to log", whatToDoOnError, etc)
    void doStuff() {
                doTheThing():
                   }
}

问题:是否存在解决问题的库或现有项目。有没有人有成功做到这一点的例子?我不想重新发明轮子,但我一直在挖掘空洞。基于对这个问题的回答,我可以开始一个github项目来做到这一点。

杰克沃顿通过木材让我们分道扬.. https://github.com/JakeWharton/timber这是注入日志框架的一种好方法,但仍会导致开发人员对代码进行调用。

1 个答案:

答案 0 :(得分:2)

面向方面编程是您需要的。

一个方面是一个常见的特征,它通常分散在方法,类,对象层次结构甚至整个对象模型中。这种行为的外观和气味应该具有结构,但是你无法通过传统的面向对象技术在代码中找到表达这种结构的方法。

方面通常用于记录缓存验证监控

Here是一个基本描述以及一些像AspectJ

这样的库