ydf0509 / nb_log

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

为什么一定要将config复制到项目本地路径 #20

Closed TotoroQwQ closed 1 year ago

TotoroQwQ commented 2 years ago

一直使用loguru,今天刚了解到大佬您的这个nb_log,性能的确优秀,但是有点使用问题 请教一下。

个人使用python多是做一些简单的功能,比如api对接,数据同步等,大项目使用python较少,如果说的不对,谅解一下。我一般是希望文件数越少越好,能不配置就不配置。能用默认配置就默认配置。

而且看各种传参基本可以实现修改不同效果了,好奇为啥一定要将config.py复制到项目下,如果想要进阶的配置,可以把配置独立出来,让用户自己创建文件,增加/修改配置,给一个方法读取用户的配置即可。不想配置的话,就能做到直接使用,发挥python灵活的优势。

还有一个是PYTHONPATH的问题,本地python环境复杂,PYTHONPATH很多,当前项目路径不一定是sys.path[1],我这一般是sys.path[0]。可以修改到1这个位置,但是如果多人合作,还要要求每个人改成一样的,比较麻烦。为啥不直接让用户传一个path过去?修改path是不难,可让每个人都修改就不简单。

如果前面没有强制复制config,而是给一个方法让用户调用,用户自己设置config,并传一个path过去,使用起来不是更加简洁么?也不用考虑pythonpath的问题。

不知道有没有说清楚。

ydf0509 commented 2 years ago

你完全理解错了,我一个人开发十几个不同项目,也没见有问题。你理解的环境变量是永久写死固定到配置文件中的,这样大错特错,nb_log说的是让你设置cmd窗口会话临时环境变量。懂PYTHONPATH很重要,我发个博客你看看,你看看懂PYTHONPATH有多方便和重要,你看这里面的demo项目结构,不要PYTHONPATH就很麻烦很low。

https://www.cnblogs.com/ydf0509/p/15573807.html

TotoroQwQ commented 2 years ago

谢谢大佬。

今天看了下pythonpath,是我前面理解错了。 对于多入口的项目,或者多模块,要单独调试某一个模块的时候,pythonpath相当于一个项目全局配置,能够保证代码一致性。

但是如果只是单入口的简单开发,感觉用处不大。

尝试了对比了pycharm,cmd,和经常用的vscode,pycharm自带pythonpath,cmd可以简单设置临时pythonpath,但还没找到vscode设置临时pythonpath的方法,比较蛋疼,在vscode里面使用这个很麻烦。

----------------------------------以上是pythonpath的问题-------------------------------- 另外一个问题,这个nb_log_config.py能否不要自动生成,如果我想自定义一些配置,可以给出解决途径,我自己去配置或者重写方法。但如果我只想轻量的使用一下,最好是能够做到导入即用。

然后我设置了do_not_use_color_handler=True,但是log还是打印一堆教我打印颜色的教程。感觉有点没必要,可以放在项目的Readme里面,想要改就自己去学着改。

我觉得一个包好不好,首先是要使用简单,在轻量使用时可以导入即用,在需要拓展时,有丰富的可拓展空间以及对应配置。

TotoroQwQ commented 2 years ago

VSCODE 配置 PYTHONPATH 找到了。 一般vscode执行python是bash,可以使用export PYTHONPATH=./配置临时变量,但有的python插件每次运行或者调试会新启一个bash客户端,这种就比较蛋疼。

ydf0509 commented 2 years ago

vscode设置pythonpath博客里面教的这么清楚了。pythonpath必须要学习的,复杂深层级文件夹的项目尤其要学习pythonpath。

ydf0509 commented 2 years ago

提示彩色设置的那段话,有单独的配置项屏蔽这句提示,你没看吧。

ydf0509 commented 2 years ago

为什么拷贝了,希望用户知道有哪些变量可以用,否则你自己新建一个配置文件,你自己又不知道配置项可以写哪些变量。

ydf0509 commented 2 years ago

这种自动读取配置文件的,比手动指定配置文件方便多了。pythonpath是必学的,不是为了nb_log才需要学pythonpath。你再看看博客的那个项目例子,压根没有导入nb_log,但你不设置pythonpath,run5.py就运行不起来报错d1包找不到。

ydf0509 commented 2 years ago

https://www.cnblogs.com/ydf0509/p/15573807.html 看下这个博客

TotoroQwQ commented 2 years ago

这个看到了,是可以屏蔽,但是从有这个文件开始,就觉得使用不够轻量。 get_logger_and_add_handlers方法的几个参数感觉就基本可以满足大部分使用者的需求。再复制出来感觉增加多余的项目交接难度,虽然注释很多,但是刚上手的一定会问这个文件有什么用。有点画蛇添足的感觉。就像这个包是个完善的厨房,我想喝口水,但是直接整一桌满汉全席。

像flask插件,上手可以很简单,但是想要进阶的功能官方项目文档可以自己去学,而不是一下子都给你。

ydf0509 commented 2 years ago

一个是全局一个是针对单个logger实例,作用域不一样。get_logger如果不传参就优先使用配置文件的设定,穿了参数就函数入参优先。一个项目例如设置文件夹路径,实例化几十个logger传入几十次文件夹路径就不需要了

ydf0509 commented 2 years ago

这个看到了,是可以屏蔽,但是从有这个文件开始,就觉得使用不够轻量。 get_logger_and_add_handlers方法的几个参数感觉就基本可以满足大部分使用者的需求。再复制出来感觉增加多余的项目交接难度,虽然注释很多,但是刚上手的一定会问这个文件有什么用。有点画蛇添足的感觉。就像这个包是个完善的厨房,我想喝口水,但是直接整一桌满汉全席。

像flask插件,上手可以很简单,但是想要进阶的功能官方项目文档可以自己去学,而不是一下子都给你。

flask celery导致很多人完全不知道有哪些功能可以设置,大部分博客介绍celery flask都是个简单demo,用户不耐烦看官方全部教程导致用户亮能配置哪些都不知道。

TotoroQwQ commented 2 years ago

这个看到了,是可以屏蔽,但是从有这个文件开始,就觉得使用不够轻量。 get_logger_and_add_handlers方法的几个参数感觉就基本可以满足大部分使用者的需求。再复制出来感觉增加多余的项目交接难度,虽然注释很多,但是刚上手的一定会问这个文件有什么用。有点画蛇添足的感觉。就像这个包是个完善的厨房,我想喝口水,但是直接整一桌满汉全席。 像flask插件,上手可以很简单,但是想要进阶的功能官方项目文档可以自己去学,而不是一下子都给你。

flask celery导致很多人完全不知道有哪些功能可以设置,大部分博客介绍celery flask都是个简单demo,用户不耐烦看官方全部教程导致用户亮能配置哪些都不知道。

感谢大佬耐心回复。

这个是一个取舍问题吧,开放所有全局配置势必增加每一个使用者的少量阅读和理解成本,不开放,但是给文档资料,就是增加部分使用者一定的学习成本。我个人认为后者是合理的,你想要进阶的功能势必要付出更多的成本,而轻量便捷的使用更能快速传播。之前使用loguru就是被导入即用吸引的。

YellowDong commented 1 year ago

这个看到了,是可以屏蔽,但是从有这个文件开始,就觉得使用不够轻量。 get_logger_and_add_handlers方法的几个参数感觉就基本可以满足大部分使用者的需求。再复制出来感觉增加多余的项目交接难度,虽然注释很多,但是刚上手的一定会问这个文件有什么用。有点画蛇添足的感觉。就像这个包是个完善的厨房,我想喝口水,但是直接整一桌满汉全席。 像flask插件,上手可以很简单,但是想要进阶的功能官方项目文档可以自己去学,而不是一下子都给你。

flask celery导致很多人完全不知道有哪些功能可以设置,大部分博客介绍celery flask都是个简单demo,用户不耐烦看官方全部教程导致用户亮能配置哪些都不知道。

感谢大佬耐心回复。

这个是一个取舍问题吧,开放所有全局配置势必增加每一个使用者的少量阅读和理解成本,不开放,但是给文档资料,就是增加部分使用者一定的学习成本。我个人认为后者是合理的,你想要进阶的功能势必要付出更多的成本,而轻量便捷的使用更能快速传播。之前使用loguru就是被导入即用吸引的。

从issues中多个使用者反馈这个问题来看,其设计是值得商榷的,希望大佬可以考虑考虑本着python的简洁原则,只定义一些默认的配置,留个口给用户自定义一些进阶配置就可以,使用nb_log时在项目中生成额外的配置文件感觉有点突兀

ydf0509 commented 1 year ago

nb_log可以不在python项目根目录,配置文件可以是在机器上的任何目录,你自己学习PYTHONPATH就知道了,nb_log使用读取配置的原理你懂吗?你懂了就知道可以放在任何地方了,关键是你不懂什么是PYTHONPATH。你了解下sys.path很有必要,python导入一个模块的机制是什么,是怎么查找的?

ydf0509 commented 1 year ago

有全局配置的原因是,nb_log和funboost框架都是暴露了很多入参,给用户预留高度的定制和丰富的功能。担忧的用户只使用某些方面,如果没有全局配置文件,那就每个调用这个包的地方传很多相同一摸一样的入参。比如有的用户永远都需要使用日期切割方式的文件,那就每次都要传file_handler_type,有的人希望默认自动生成日志文件,不需要get_logger每个地方自己去手动指定文件名,这些会造成用户使用一直需要传递很多相同的入参,麻烦。