使用pip即可安装使用
pip install nb_log
0)自动转换print效果,再也不怕有人在项目中随意print,导致很难找到是从哪里冒出来的print。
只要import nb_log,项目所有地方的print自动现型并在控制台可点击几精确跳转到print的地方。
1)兼容性
使用的是python的内置logging封装的,返回的logger对象的类型是py官方内置日志的Logger类型,兼容性强,
保证了第三方各种handlers扩展数量多和方便,和一键切换现有项目的日志。
比如logru和logbook这种三方库,完全重新写的日志,
它里面主要被用户使用的logger变量类型不是python内置Logger类型,
造成logger说拥有的属性和方法有的不存在或者不一致,这样的日志和python内置的经典日志兼容性差,
只能兼容(一键替换logger类型)一些简单的debug info warning errror等方法,。
2) 日志记录到多个地方
内置了一键入参,每个参数是独立开关,可以把日志同时记录到8个常用的地方的任意几种组合,
包括 控制台 文件 钉钉 邮件 mongo kafka es 等等 。在第8章介绍实现这种效果的观察者模式。
3) 日志命名空间独立,采用了多实例logger,按日志命名空间区分。
命名空间独立意味着每个logger单独的日志界别过滤,单独的控制要记录到哪些地方。
logger_aa = LogManager(‘aa‘).get_logger_and_add_handlers(10,log_filename=‘aa.log‘) logger_bb = LogManager(‘bb‘).get_logger_and_add_handlers(30,is_add_stream_handler=False,ding_talk_token=‘your_dingding_token‘) logger_cc = LogManager(‘cc‘).get_logger_and_add_handlers(10,log_filename=‘cc.log‘)
那么logger_aa.debug(‘哈哈哈‘)
将会同时记录到控制台和文件aa.log中,只要debug及debug以上级别都会记录。
logger_bb.warning(‘嘿嘿嘿‘)
将只会发送到钉钉群消息,并且logger_bb的info debug级别日志不会被记录,
非常方便测试调试然后稳定了调高界别到生产。
logger_cc的日志会写在cc.log中,和logger_aa的日志是不同的文件。
4) 对内置looging包打了猴子补丁,使日志永远不会使用同种handler重复记录
使用nb_log,对同一命名空间的日志,可以无惧反复添加同类型handler,不会重复记录。
5)支持日志自定义,运行此包后,会自动在你的python项目根目录中生成nb_log_config.py文件,按说明修改。
1、pycham中调整设置控制台日志打印出的颜色
2、设置完成后去掉console弹出的颜色设置
3、自动显示print且可跳转
在nb_log_config.py (第一次执行打印日志会在当前项目的根目录下自动生成)中进行设置如下:
设置完成后自动跳转:
4、实际操作中使用:
实际暂时用不到那么多功能,也不需要多实例logger,所以取里面的一次,进行了封装,就不用在Py文件的里面每次都实例下
log地址原日志文件是写死的,允许被修改,默认日志存放路径,可以在源码里查看到。
一下封装,可以再优化:
1、logger名称可以作为参数传进来
2、log_path和log_filename可以放在配置文件里读取过来,放在nb_log_config.py里也是可以
以下封装只是个人觉得做自动化测试使用比较方便
还有很多别的功能可以查看get_logger_and_add_handlers方法,或者nb_log的init文件说明
1 from nb_log import LogManager 2 3 class NbLog: 4 5 def __init__(self): 6 self.logger=LogManager(‘simple‘).get_logger_and_add_handlers(log_path="log存放地址",log_filename="日志名称") 7 8 def error(self,msg): 9 return self.logger.error(msg) 10 def debug(self,msg): 11 return self.logger.debug(msg) 12 def info(self,msg): 13 return self.logger.info(msg) 14 def warning(self,msg): 15 return self.logger.warning(msg) 16 def exception(self,msg,exc_info=True): 17 return self.logger.exception(msg,exc_info) 18 19 if __name__ == ‘__main__‘: 20 dolog =NbLog() 21 dolog.debug("这个是debug日志") 22 dolog.error("这个是error日志")
引用:https://www.cnblogs.com/123anqier-blog/p/13406702.html
原文:https://www.cnblogs.com/yywy/p/13572119.html