gpt4 book ai didi

java - Web 应用程序的真实世界用户 Activity 日志记录策略

转载 作者:行者123 更新时间:2023-11-28 22:13:42 25 4
gpt4 key购买 nike

我有一个网络应用程序,我的客户要求他想知道。

我想出了两个主意。
我想验证我的想法是否正确。


这些是客户要求。

who: 访问者是谁(e.g. remoteAddress-IP)
when:访问者什么时候在网络应用程序上做某事
what:访问者具体采取了什么操作,例如“按下打印按钮”
where:哪个页面,例如访问者访问的 URL

我的想法1.
只需发出一个 SQL 查询来记录访问该网站的每个人的用户 Activity 。如果访问者单击页面链接,Web 应用程序会将用户 Activity 写入数据库并呈现请求的页面。
我认为这会对用户体验产生不好的影响。页面呈现可能会变慢,因为它必须做额外的工作。这种方法最终会发出过多的 SQL 查询并最终成为一个坏主意吗?

我的想法2.
为每个用户或每个用户 Activity (例如单击打印按钮)启动一个新线程。页面呈现以自己的速度继续进行,日志记录将在线程中单独完成。
我认为这可能会创建太多线程。这是个好主意还是最终会占用太多资源?

我想知道这些是否是一个好的、真实的实践。如果有更好的方法,请分享。 :)

最佳答案

建议 1:使用和不使用数据库日志记录系统来分析您的应用程序。您可能会发现数据库日志记录可以满足您的性能需求,而无需进行重大架构更改或性能调整。

如果您发现您能够维持您的吞吐量要求,但偶尔会在高峰期备份,您可以将数据库日志记录移动到一个线程中,并使用 java.util 中的并发队列传递日志消息.并发。这比为每个日志事件 fork 一个单独的线程要高效得多。

我怀疑如果发现性能问题,就会发现瓶颈出在数据库上。但这只是一种直觉 - 您必须分析自己的设置以找出优势和劣势。

注意:要比较启用和不启用日志记录的性能,您可以在启动时将开/关 boolean 值或特定日志级别配置到最终静态变量中。 JIT 将优化 if (loggingEnabled)if (logLevel > 3) block 中包含的所有代码,前提是这些条件保证为假。这使您可以在使用和不使用日志记录的情况下运行相同的代码,而无需在分析当前(非日志记录)方法时为日志记录代码支付性能损失。

关于java - Web 应用程序的真实世界用户 Activity 日志记录策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15779523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com