DotNet 项目利用拦截器记录访问日志
背景
当前,各类云服务百花齐放,各大云服务厂商也都提供了各式各样的访问接口供开发者使用,从而接入大厂提供的某种能力。而在云服务平台的控制台里,我们会看到我们所使用的接口服务的使用情况,比如当日调用量,总调用量等等。然后平台再根据这个使用情况来计算结算费用。
所以话题就是,这个调用量是怎么统计的呢?
实例
在 dotnet 项目里,可以通过拦截器的功能,拦截所有 http 请求,从而实现接口或者页面的访问记录。
以 dotnetcore 项目为例,可以通过继承 IActionFilter 接口,并实现 OnActionExecuted 或者 OnActionExecuting 两个方法,来实现日志的记录。
比如我这里,分别记录了这两种类型的方法,在 OnActionExecuting 方法里,我记录了用户的访问地址,参数,客户端类型,访问时间,等内容。而在 OnActionExecuted 里,则记录了返回的内容。
具体的代码就不展示了,就是简单的拦截请求上下文,解析出想要的内容。
然后这里还想说一点的是,结合我之前写的一篇《日志归一管理的一种解决方案》。
把日志内容,以特定的格式,写入到 redis 的队列里类型里,然后通过 logstash 组件,将日志实时的同步到 ElasticSearch。
最终,可以在 kibana 里来查看接口的调用情况。
而如果是比较传统的.net framework 项目,可以在 global.ashx 里的 Application_BeginRequest 里实现或调用相关日志记录的方法,从而将访问日志实时传输到队列里。
版权声明: 本文为 InfoQ 作者【为自己带盐】的原创文章。
原文链接:【http://xie.infoq.cn/article/1168dcb77939fc86d5ade4025】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论