如何才能把每个用户访问的url及时间记录下来,但又不影响系统性能

一个web系统,客户有这样的要求:把每个登录人员访问的url地址及时间全部记录下来, 系统是jsp 实现,我的想法是加一个Filter ,在这个Filter中做记录, 当在线人员多时,所有的操作都要被这个filter 过一遍,如果在Filte中做过多的操作,估计会影响性能,那么有没有什么办法实现这个需求呢? 我能想到的是:

1 内存中放一个 ArrayList , 记录下url+时间+用户ID,当记录条数达到一定数量时,比如1000条时,再保存到数据库中

2 使用第三方的缓存框架,让它们来缓存并序列化到磁盘中

 

各位能给点什么建议吗。谢谢

 

 

 

用filter可以,用过滤后缀名来保证只记录一次就好了,开销不会很大,不推荐用数据库,这种日志信息直接写日志文件最合适,把日志信息缓存在内存里,再搞一个后台线程做集中写入,可以做到对性能影响最小

客户要这些数据要干嘛?还不是要做网站分析么?你只需要在网站的jsp中加几行代码,注册一个google账号,利用Google Analytics来进行网站分析,绝对比你们自己开发的分析工具好用。[url]http://baike.baidu.com/link?url=KAq2oG5VTg7bBuyBJvY0dOWEd4kIIDiopvfYsUSK1_25rgQxlnIRD_1kG45fNIfnNJTiIzpnHCjHeoGxqB9vzjtW96FxKsXcFEGyjhz_qC1l7YqVov1z8-Hhn-wkO0ex[/url]

不了解整体架构,如果有负载均衡(apache/nginx)可以在这上边留log,性能比业务AP加处理要好的多。

nginx为例,默认就保留了每个访问url、时间、访问ip,各种信息很齐全

可以在服务器开启一个线程,设置低的优先级。 线程循环访问一个队列。有东西就拿出来入库。 然后每次用户请求的时候就把信息扔到队列里 就完事了。这个方法会很快的返回。

类似于android的 looper, handler, message 机制