当前位置: 首页 > 后端技术 > Python

GitHub:为什么你的日志记录方法应该是日志记录!!!

时间:2023-03-25 21:43:51 Python

各位小伙伴大家好,今天要给大家介绍的开源项目是:loguru,这个开源项目是一个简单的Python的日志库,这个开源项目的目的是解决标准的日志记录,通过添加编译器上一系列有用的功能注释,使Python日志记录不那么痛苦。我们用于日志记录的配置方法基本上是这样的:(asctime)s-%(levelname)s-%(message)s',datefmt='%Y-%m-%d%H:%M:%S',)使用官方的日志记录模块,每次每次你创建一个项目,你必须自己配置它。代码使用起来往往会有点混乱,但是使用这个loguru模块,只需要两行代码就可以完成上面的配置,简单易用。安装pipinstallloguru最简单的使用方法是导入模块,然后调试输出,看控制台效果。fromloguruimportloggerlogger.debug("That'sit,beautifulandsimplelogging!")在控制台中以彩色打印!如果您的终端兼容,loguru会自动为日志添加颜色。您可以使用接收器格式的标记标签来定义您喜欢的样式。logger.add(sys.stdout,colorize=True,format="{time}{message}")输出到文件只需要加上一行代码从loguruimportlogger#添加到名为demo.log的文件中logger.add("demo.log")logger.debug("就是这样,漂亮又简单的日志!")输出到文件中,并以时间分割日志作为文件name,可以这样做:fromloguruimportlogger#按时间拆分日志logger.add('file_{time}.log')logger.debug("就是这样,漂亮又简单的日志!")效果展示(见filename)filecontrol高级用法logger.add("rotation.log",rotation="500MB")以上配置可以每500MB存储一个文件,如果每个日志文件过大则创建一个新的日志文件。我们在配置日志名的时候加入了时间占位符,这样生成的时候可以自动替换时间,生成一个文件名包含时间的日志文件。我们也可以使用rotation参数,每隔一定时间创建一个日志文件,例如:logger.add('runtime_{time}.log',rotation='12:00')这样就创建一个新的日志文件并输出每天中午12:00。另外,我们还可以配置日志文件的循环时间,比如每两周创建一个日志文件,写法如下:logger.add('runtime_{time}.log',rotation='2week')所以我们可以实现两个创建一个一周的日志文件。不知道大家有没有遇到过这样的情况。在很多情况下,一些非常古老的日志对我们来说是没有用的。它们白白占用了一些存储空间,不清除的话会很浪费。retention该参数可以配置日志的最长保留时间。比如我们要设置日志文件最多保留7天,我们可以这样配置:logger.add('runtime.log',retention='7days')这样最近的7天'日志将保留在日志文件中。也不用担心日志沉积。loguru还可以配置文件的压缩格式,比如使用zip文件格式保存,如下:logger.add('runtime.log',compression='zip')这样可以节省更多的存储空间。Stringoutputlogger.info('IfyouareusingPython{},prefer{feature}course!',3.6,feature='f-strings')添加参数非常方便。Traceback记录在很多情况下,如果我们遇到运行错误,如果不小心在打印日志的时候没有配置Traceback的输出,那么很有可能就无法追踪到错误。但是使用loguru之后,我们可以使用它提供的装饰器直接记录Traceback,类似这样的配置:@logger.catchdefmy_function(x,y,z):#Anerror?反正是被抓了!return1/(x+y+z)我们来做个测试。我们在调用的时候三个参数都传入了0,直接导致了除以0的错误。我们看看会发生什么:my_function(0,0,0)运行完成后,可以发现日志中出现了Traceback信息,并且输出了当时的变量值给我们,真是太神奇了!结果如下:>File"run.py",line15,inmy_function(0,0,0)└File"/private/var/py/logurutest/demo5.py",第13行,在my_function中返回1/(x+y+z)││└0│└0└0ZeroDivisionError:除以零根据需要进行结构化日志记录想要序列化日志以便于解析或传递它们?使用序列化参数,每条日志消息将在发送到配置的接收器之前转换为JSON字符串。logger.add('file_{time}.log',serialize=True)#{"text":"2020-07-1521:47:33.793|DEBUG|__main__::14-就是这样,漂亮又漂亮简单的记录!\n","record":{"elapsed":{"repr":"0:00:00.017317","seconds":0.017317},"exception":null,"extra":{},"file":{"name":"loguru_demo.py","path":"/Users/notes/modules/loguru_demo.py"},"function":"","level":{"icon":"\ud83d\udc1e","name":"DEBUG","no":10},"line":14,"message":"就是这样,漂亮又简单的日志!","module":"loguru_demo","name":"__main__","process":{"id":7280,"name":"MainProcess"},"thread":{"id":4458839488,"name":"MainThread"},"time":{"repr":"2020-07-1521:47:33.793271+08:00","timestamp":1594820853.793271}}}邮件通知Loguru可以轻松与强大的通知程序库(必须单独安装)结合使用)在程序意外失败时接收电子邮件或发送各种其他通知。importnotifiersparams={"username":"you@gmail.com","password":"abc123","to":"dest@gmail.com"}#发送一个通知notifier=notifiers.get_notifier("gmail")notifier.notify(message="Theapplicationisrunning!",**params)#从notifiers.loggingimportNotificationHandlerhandler=NotificationHandler("gmail",defaults=params)logger.add(handler,level="ERROR")或与ES比内置日志记录快10倍尽管日志记录在大多数情况下对性能的影响可以忽略不计,但零成本的记录器将允许它在任何地方使用而无需太担心。在即将发布的版本中,Loguru的主要功能将以C语言实现,以实现最高速度。以上就是loguru的基本用法。有兴趣的朋友可以研究一下这个用法。它非常简单易用。赶快在你的项目中配置吧!开源地址:https://github.com/Delgan/loguru喜欢今天的推荐吗?如果喜欢,请在文章底部留言或点赞,表示对我的支持。您的评论、点赞、转发和关注是我持续更新的动力!关注公众号回复:“1024”免费领取海量学习资源,先到先得!