DotNet项目利用拦截器记录访问日志
背景
当前,各类云服务百花齐放,各大云服务厂商也都提供了各式各样的访问接口供开发者使用,从而接入大厂提供的某种能力。而在云服务平台的控制台里,我们会看到我们所使用的接口服务的使用情况,比如当日调用量,总调用量等等。然后平台再根据这个使用情况来计算结算费用。
所以话题就是,这个调用量是怎么统计的呢?
实例
在dotnet项目里,可以通过拦截器的功能,拦截所有http请求,从而实现接口或者页面的访问记录。
以dotnetcore项目为例,可以通过继承IActionFilter接口,并实现OnActionExecuted或者OnActionExecuting两个方法,来实现日志的记录。
比如我这里,分别记录了这两种类型的方法,在OnActionExecuting方法里,我记录了用户的访问地址,参数,客户端类型,访问时间,等内容。而在OnActionExecuted里,则记录了返回的内容。
具体的代码就不展示了,就是简单的拦截请求上下文,解析出想要的内容。
把日志内容,以特定的格式,写入到redis的队列里类型里,然后通过logstash组件,将日志实时的同步到ElasticSearch。

最终,可以在kibana里来查看接口的调用情况。
而如果是比较传统的.net framework项目,可以在global.ashx里的Application_BeginRequest里实现或调用相关日志记录的方法,从而将访问日志实时传输到队列里。