Python 如何进行全局的请求日志记录?

2019-06-06 13:36:26 +08:00
 superbai

现在有多个接口,怎么能够给这些接口添加统一的请求日志记录功能,并且自动在有新增的接口时,也无感增加日志记录?

在网上搜索到的方法都是写一个装饰器,然后在接口函数上使用这个装饰器。这种方法没有满足无感的需求,如果写代码的时候忘记加装饰器的话,就没有日志记录了

2433 次点击
所在节点    Python
15 条回复
so1n
2019-06-06 14:11:41 +08:00
中间件
ifoolish
2019-06-06 14:23:07 +08:00
全部接口继承一个基类
lauix
2019-06-06 14:26:23 +08:00
什么框架,flask 可以设置生命周期。其他框架也有的,自己查查文档。也可以自己写个 装饰器。
superbai
2019-06-06 14:45:07 +08:00
@ifoolish 嗯嗯,除了这种方式,还有其它的方法么?
@lauix 不用框架有什么方法么?
@so1n 是指 django 的中间件么?不用框架有什么方法么?
binux
2019-06-06 14:46:59 +08:00
不用框架就只能 monkey patch 了
ipwx
2019-06-06 14:47:43 +08:00
@superbai 做一个 metaclass,然后你就可以自动给所有成员函数自动加装饰器了。
polebug
2019-06-06 15:02:09 +08:00
赞同楼上 写一个 metaclass 给所有成员函数加上这个装饰器
不过我不觉得直接给接口函数加装饰器有什么问题
lihongjie0209
2019-06-06 15:07:11 +08:00
没有拦截器?
flyingghost
2019-06-06 16:28:53 +08:00
实在想无感,直接在 nginx 反代层做好了。
思维不要限制在 flask 之内嘛。
superbai
2019-06-06 18:21:14 +08:00
@binux
@ipwx
@polebug
感谢,我瞅瞅;接口加装饰器当然没问题,不过我觉得有点烦...

@lihongjie0209 Java 的那个拦截器么?我也想问哈哈哈,看起来是没有的

@flyingghost 感谢,虽然一般没有这么做的,但也是个思路~
xchange
2019-06-06 18:56:32 +08:00
所有 logger 都输出到 stderr,然后用 supervisor 把输出重定向到一个文件里
troywinter
2019-06-06 18:59:36 +08:00
如果是接口的请求最好直接在网关层做,微服务里应该很好做,我不喜欢在服务自己的框架里做很多事情,keep it simple
chengxiao
2019-06-06 19:11:21 +08:00
uwsgi 的日志不是记录的都有么?直接日子分析下不就好了?
sazima
2019-06-06 20:05:51 +08:00
@app.before_request
linvaux
2019-06-09 22:26:04 +08:00
emm.....我之前就是写了个装饰器,没想到什么好办法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/571478

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX