记录用户交互:log4j?

我需要你的建议。 我有一个Java应用程序,我想记录用户使用我的应用程序的方式。 我想知道最常用的按钮是什么。 计算应用程序中新患者的平均引入时间。 等等。在您看来,最好和最简单的方法是什么? 它使用Log4j吗?

谢谢您的合作。

最好的祝福。

丹尼尔

考虑到相当高级别的要求,我也会尝试给出高级答案。 对于这种与主要业务逻辑完全不同的横切关注点,我建议使用AOP(如果这是您选择的框架,则使用AspectJ或Spring AOP)。

建立一套好的专用方面需要一些时间,但它肯定会得到回报,因为你可以逐渐引入这个function而不会干扰主要应用程序。

在这种情况下,我将使用一些共享的“统计容器”抽象来收集方面的信息,然后通过JMX或SNMP(或任何其他自定义解决方案)公开它。

我不明白为什么log4j会是一个糟糕的选择。 如果您有一个简单的应用程序,则以包含时间戳的格式(以及可能是应用程序性质的线程标识符)将消息记录到文件中可能是记录所需数据的简单方法。 然后,您需要投入更多资金,从日志文件中提取所需的信息。

并不是说反对AOP的建议确实更干净,但开始时也更复杂。

什么可以分析您的访问日志,您可以看到哪个网​​址被访问最多 – 所以您可以看到最频繁点击的按钮 – 如果只有这个按钮导致url。

我已经考虑过为我的应用程序做类似的事情,并至少进行一些高级用户事件的记录(打开文件,保存,新建等),这样只给出一个日志文件就可以说出什么用户在做什么。

这是一个很好的例子:
NetBeans平台手势集合基础结构 。

这应该会给你一些如何做你想做的事情的想法。 如果您有一个Java Swing应用程序,它可能可以移植到NetBeans平台,然后您可以免费获得此更多。 免责声明:我是NetBeans平台上的开发人员。

尽管NetBeans称之为“手势集合”,但它似乎没有其他任何人,或者有一个通用的术语; “用户行动分析”会很好,但几乎任何带有“分析”的东西现在指向谷歌。 许多程序都说“匿名使用数据”,这给我发现了类似的问题 ,这可能有助于某些人使用Eclipse。

对于webapp,您应该能够从Web访问日志中收集大部分内容,可能会向请求添加一些其他信息(例如’&userButton = SaveAs’),甚至添加一些额外的Ajax-y事件来跟踪用户(be小心不要产生太多的额外流量:仅为某些用户启用;使用零字节文件(如GET /zerobytes.txt?t=1313518123&event=hover&element=menuNav&duration=12 )最小化服务器响应。 使用jquery可能会更容易,并且可能不会对HTML进行任何更改。

在服务器端,可能有更丰富的工具可供选择,并且有许多支持此function的技术(JMX,MBeans,JSR-77等)。 如果您正在谈论一个Web应用程序, JavaMelody可能会有一些特定于应用程序的自定义事件,特别是如果您可以将它们绑定到启动某种类型的服务器端处理。