ydf0509 / nb_log

pip install nb_log 各种日志handler和自动转化项目的任意print的效果。日志自动彩色炫酷,可点击控制台的日志自动精确跳转到pycharm的文件和行号。文件日志多进程切割安全。在10个最重要方面全方位超过loguru
375 stars 72 forks source link

性能测试 #73

Closed wangjinyao closed 30 minutes ago

wangjinyao commented 3 days ago

性能对比用的是“日志条数”,希望能控制每条日志的长度一致。

测试用例中,nb_log打印的日志message是3个字节“{x} {i}” loguru打印的日志message是18个字节,“测试多进程日志切割”

单从文档看,nb_log 比 loguru 写入文件的字节少6倍,耗时却少4倍,应该是loguru性能更优。

ydf0509 commented 3 days ago

你说错了吧,日志本身太短的情况下,这个忽略不计。 日志本身的内容是需要被日志模板来格式化的,nb_log的日志模板为了显示丰富方便排查线上问题,nb_log的日志模板格式化内容后,比loguru长太多了。 你可以看看实际的字符串格式化后的长度

ydf0509 commented 3 days ago

logger.warning('thankyou') 不是吧thankyou 记录下来,还有文件名 行号 机器 进程 日志命名空间 日志时间 等信息

ydf0509 commented 3 days ago

你把你的测试代码发下, 操作系统 都发下

wangjinyao commented 3 days ago

另外,nb_log日志条数实际打印出来比loguru少了5倍。(每循环只打印1条,loguru是5条) 测试代码分别是 https://nb-log-doc.readthedocs.io/zh-cn/latest/articles/c6.html#loguru-200 https://nb-log-doc.readthedocs.io/zh-cn/latest/articles/c6.html#nb-log-200

ydf0509 commented 3 days ago

建议你实际运行,打印10条也是nb_log快, 文档有时候是后来加了演示代码

ydf0509 commented 3 days ago

你是实际运行的吗,还是只看文档

ydf0509 commented 3 days ago

nb_log运行很容易的,只是一个包,不是框架,所以很容易使用,建议亲自试下。

nb_log 有批量自动写的功能,io交互次数减少了,快太多了。

不管是打印到控制台还是写到文件,都是io,是io就要耗时。你光注意字符串长度是没用的, 你一次打印100万字母,和分100万次,每次只打印一个字母,速度是天壤之别,光看长度没用。

wangjinyao commented 3 days ago

性能上,每次log都是写到内存缓冲区,最终写文件关闭缓冲区才是最耗时的,如果做性能对比确实应该考虑控制变量才行。

其他: 实际运行下来,这个包问题很多,最突出是不方便,要求使用PYTHONPATH,然后创建配置文件到PYTHONPATH路径下,默认又会写到home目录,等等。PYTHONPATH在一个项目被其他项目运行的时候是会改变的,不能每次都要求调用方更新配置吧。 出于便捷考虑,不要依赖PYTHONPATH; 出于安全考虑,不要在执行时生成py文件! 任何自动生成的代码都应该认为不安全。

ydf0509 commented 3 days ago

那就是太不懂临时环境变量和永久环境变量区别了,你可以看pythonpathdemo项目的说明。 启动任何项目都应该设置 pythonpath为项目根目录最好,和你用不用nb_log无关。 你看 pythonpathdemo 的项目说明。

ydf0509 commented 3 days ago

nb_log_config.py配置文件放在那里都可以的,主要是你没看文档,,没懂pythonpath。 再说了你自己建好配置文件不就不自动生成了吗?又没说非要自动生成,你自己先把配置文件建立好就行了。

ydf0509 commented 3 days ago

最根本原因是你完全没懂pythonpath,10个python项目都可以共用一个 nb_log_config.py,主要根本原因是没懂pythonpath啊。强烈建议你看下 pythonpathdemo,看过的人都说写的太好了,醍醐灌顶,效率倍增。

比如你10个项目都写了import requests,难道需要你把requests包复制到你的10个项目里面去吗?那你知道为什么10个项目都能导入 requests包的本质原因吗?

ydf0509 commented 3 days ago

你先要看pythonpathdemo,有的pythoner到现在没听说pythonpath,到现在连操作系统的临时环境变量和永久环境变量区别都不知道。强烈建议看 pythonpathdemo

ydf0509 commented 3 days ago

默认写日志的文件夹,就是不打算放在项目里面去, 把日志写到 项目文件夹里面去太不好了,在生产环境这样很不好。默认就是不建议吧日志文件放到项目中去。比如吧项目代码复制一分,然后临时在新的复制文件夹改改代码,你这样还要把日志文件都拷贝了,这样好吗? 因为我的习惯就是把所有项目的日志文件写到单独的文件夹中,而不是吧项目的日志放在每个项目的文件夹里面去

ydf0509 commented 3 days ago

一般在生产,我在 /data/app/ 里面有 proj1 proj2 项目。然后在 /data/logs/ proj1 proj2 里面去放各个项目的日志文件,我就没打算把日志文件放到项目文件夹里面去。

ydf0509 commented 3 days ago

他: 实际运行下来,这个包问题很多,最突出是不方便,要求使用PYTHONPATH,然后创建配置文件到PYTHONPATH路径下,默认又会写到home目录,等等。PYTHONPATH在一个项目被其他项目运行的时候是会改变的,不能每次都要求调用方更新配置吧。 出于便捷考虑,不要依赖PYTHONPATH; 出于安全考虑,不要在执行时生成py文件! 任何自动生成的代码都应该认为不安全。

你把你的控制台截图下建议,你是只看代码,没实际运行吗。建议实际运行下,不要只理论 呢。 比如你觉得loguru打印的内容短,你可以吧nb_log打印100个字母,loguru打印10个字母来对比,强烈建议你亲自在pycahrm运行一下。

ydf0509 commented 3 days ago

主要是你不懂pythonpath,更加的不懂操作系统的环境变量。

image

以及

image

建议看看 https://github.com/ydf0509/pythonpathdemo