有关日志功能是否严重影响 web 框架效率?

2021-06-16 23:13:31 +08:00
 LeeReamond

发主题的时候主要想法是局限在 python 的异步框架,不过也很好奇其他语言的框架都用什么解决方案,所以标题里没有写明是 python 。

问题简单来说,我们都知道 python 的 IO 流,例如常见的 print,是一个同步阻塞操作。而目前网络端的解决方案在向异步非阻塞转移,比如 fastapi/aiohttp 这类框架,转移的同时,日志又是很重要的一个功能,总不可能一个服务没有日志。这是否意味着框架转发性能将被严重降低,有什么解决方案吗?

4375 次点击
所在节点    Python
27 条回复
statement
2021-06-17 11:45:44 +08:00
日志等级可以用开关控制。完全可以关掉大多数日志。 需要的时候再打开必要的日志等级
ScepterZ
2021-06-17 11:56:12 +08:00
@LeeReamond 你是看不懂“测 echo 性能没有意义”么,测性能当然有意义,但是用 echo 测试说这个对性能影响很大是不准确的
Digitalzz
2021-06-17 11:57:42 +08:00
python 不太清除,Java 可以参考一下,java 中使用 log4j2 等日志框架,在打印的位置信息的时候会进行加锁操作,导致大量线程处于 block 状态,可以导致性能下降 50%甚至 100%,解决办法就是不打印位置信息,按需自己编写代码时可以手动添加。就 IO 流的问题我个人感觉影响不大,可以使用日志框架的一些缓存打印,问题是可能会出现日志丢失
ospider
2021-06-17 15:59:28 +08:00
首先,正经代码没人用 print 写日志的。。
LeeReamond
2021-06-17 22:47:30 +08:00
@ScepterZ 你是看不懂我想问实现,而所谓性能下降比率是完全是无关紧要的事么? block 了
LeeReamond
2021-06-17 22:50:25 +08:00
@Digitalzz 丢失问题具体怎么解决呢,按目前的回复,工业级应该就是靠消息队列解决,确实有可靠性的问题,比如一些涉及到金钱往来的业务如果出现纠纷且恰好日志丢失了某行,岂不是很蛋疼?
myCupOfTea
2021-06-18 10:11:16 +08:00
命令行不打印,或者减少打印(并且换 loguru 拦截打印),发送数据到 logstash 想办法异步发送丢 ensure_future 里执行

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

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

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

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

© 2021 V2EX