我需要为 ASP.NET 应用程序设置一个自定义的日志记录系统。除其他外,它必须为每个请求记录一些数据。我想到了两种方法:
方法 #1:提交每个请求的每个条目。例如:在每个请求上创建一个日志条目并将其提交到数据库(使用瞬态DbContext
)。我担心此提交会给无法很好扩展的请求的服务带来开销。
方法#2:缓冲条目,定期提交。例如:在每个请求上创建一个日志条目并将其添加到并发缓冲区(使用共享锁)。当超出该缓冲区的限制时,将获取一个独占锁,缓冲的条目一次性提交到数据库(使用另一个,也是瞬态DbContext
的,仅为每次提交创建和销毁)并清空缓冲区。我知道这会使“提交”请求变慢,但这是可以接受的。我也知道关闭/重新启动应用程序可能会导致丢失未提交的日志条目,因为在这种情况下 AppDomain 会发生变化,但这也是可以接受的。
我已经在我的要求范围内实现了这两种方法,我已经对它们进行了测试,并且我已经在本地环境中尽可能多地使用它们。我还没有部署,因此我无法在真实条件下测试它们。两者似乎都同样有效,但我无法得出这样的结论。
这两种方法中哪一种是最好的?我担心数千用户高峰期间的性能。有没有我不知道的陷阱?