0

我正在开发一个基于休息的 API。对于对 API 的每个请求,我都想记录有关该特定请求的大量信息——比如谁提出了请求,他要求了什么资源,跟踪这个客户要求这个资源的次数,他是什么信息感兴趣等等。

如何在不影响每个请求的响应时间的情况下做到这一点?我的想法是将所有这些日志信息写入缓存并将缓存过期时间设置为 5 分钟。然后,这 5 分钟内的所有传入请求都将写入同一个缓存对象。当缓存过期时(当它发生时可能会得到回调)我会将它写入数据库。

你看到这种方法有什么缺点吗?你有更好的建议吗?

PS!使用内置的 IIS 日志记录功能不是一种选择,因为它不够具体。

更新: 我在这里实际上要问的是,在 CacheItemRemoved 回调中进行数据库访问是否存在任何众所周知的问题?这是个坏主意吗?

4

1 回答 1

1

异步编写绝对是要走的路。您提出的解决方案很复杂,而且效率不高。如果您不关心按顺序写入日志,最简单的方法是启动一个日志记录任务,例如:

Task.Run(() => logger.Log("stuff"));

如果顺序很重要,您也可以考虑使用 ActionBlock。请参阅相关 SO 问题中的Stephen Cleary 的示例。

于 2012-10-23T06:55:42.720 回答