python第三方异步日志库loguru简介
作者:smart_cat 发布时间:2022-03-25 14:34:23
一、引言
在编写调试Python代码过程中,我们经常需要记录日志,通常我们会采用python自带的内置标准库logging,但是使用该库,配置较为繁琐。为了提升编程效率,本文重点介绍最近发现的一个宝藏第三方日志库Loguru,该库名字来自于印度语,含义为日志大师。
我们先来做个直观的对比,来说明Loguru的优雅之处。使用python自带的logging,样例代码如下:
样例输出如下:
使用Loguru库,样例代码如下:
使用Loguru输出日志,终端执行后出现带颜色的日志,而且使用超级方便。
二、安装loguru
直接使用pip进行安装即可,命令如下:
pip install loguru
输出到终端使用方式:
from loguru import logger
logger.debug("msg msg msg!")
输出到文件使用方式:
from loguru import logger
logger.add("file_name.log")
logger.debug("msg msg msg!")
三、特性
参考官方github,里面给出了Loguru库丰富的特性,这里挑选几个重要的特性进行讲解
3.1 开箱即用
Loguru库设计的初衷就在于追求有且仅有一个logger,为了使用方便,提前预置输出样式。如果需要打印日志仅需采取如下方式:
from loguru import logger
logger.debug("That's it, beautiful and simple logging!")
3.2 无需初始化,导入函数即可使用
在Loguru中,我们如何自定义输出样式?如何过滤输出信息?如何设置日志级别?
答案是调用 add() 函数
logger.add(sys.stderr, format="{time} {level} {message}", filter="my_module", level="INFO")
示例如下:
from loguru import logger
logger.add("info.log", format="{time} {level} {message}", filter="", level="INFO")
logger.debug("This is a debug msg")
logger.info("This is a info msg")
我们查看info.log,结果如下:
3.3 更容易的文件日志记录与转存/保留/压缩方式
我们可以通过简单的配置,来让日志保存更加人性化。比如我们想要删除老的日志,或者我们希望自动压缩保存好的日志,可以参考一下命令:
logger.add("file_1.log", rotation="500 MB") # 文件过大(超过500M)就会重新生成一个文件
logger.add("file_2.log", rotation="12:00") # 每天12点创建新文件
logger.add("file_3.log", rotation="1 week") # 文件时间过长就会创建新文件
logger.add("file_4.log", retention="10 days") # 一段时间后会清空
logger.add("file_5.log", compression="zip") # 保存zip格式
3.4 更优雅的字符串格式化输出
Loguru库对字符串的处理功能更加强大,字符串格式化输出支持{} 来替换%,功能类似于str.format()
logger.info("If you're using Python {}, prefer {feature} of course!", 3.6, feature="f-strings")
3.5 可以在线程或主线程中捕获异常
我们经常会遇到代码出现crash时,我们在log里看不到任何错误的信息。在Loguru库中,可以通过 @logger.catch 装饰器来确保发生异常时,将错误信息保存下来。
示例如下:
@logger.catch
def main(x, y, z):
return x * y / z
res = main(1,2,0)
print(res)
3.6 可以支持自定义颜色
Loguru 是支持自定义颜色的,如果你不喜欢它默认的颜色,可以这么改:
logger.add(sys.stdout, colorize=True, format="<green>{time}</green> <level>{message}</level>")
3.7 支持异步,且线程和多进程安全
Loguru 默认情况下是线程安全的,但它不是多进程安全的。不过如果你需要多进程/异步记录日志,它也能支持,只需要添加一个 enqueue 参数:
logger.add("somefile.log", enqueue=True)
3.8 支持异常完整性描述
对于日志而言,没有错误堆栈的日志是没有灵魂的。Loguru 允许显示整个堆栈信息来帮助你发现问题(包括变量)。
logger.add("out.log", backtrace=True, diagnose=True) # Caution, may leak sensitive data in prod
def func(a, b):
return a / b
def nested(c):
try:
func(5, c)
except ZeroDivisionError:
logger.exception("What?!")
nested(0)
运行结果如下:
3.9 更好的日期时间处理
我们可以自定义日期输出样式,如下所示:
logger.add("file.log", format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}") #定义日期样式
3.10 支持邮件通知
Loguru 可以和强大的邮件通知模块 notifiers 库结合使用,以在程序意外失败时接收电子邮件,或发送许多其他类型的通知。
import notifiers
params = {
"username": "you@gmail.com",
"password": "abc123",
"to": "dest@gmail.com"
}
# 初始化时发送一封邮件
notifier = notifiers.get_notifier("gmail")
notifier.notify(message="The application is running!", **params)
# 发生Error时,发邮件进行告警
from notifiers.logging import NotificationHandler
handler = NotificationHandler("gmail", defaults=params)
logger.add(handler, level="ERROR")
这样配置之后,每次产生 Error 日志,程序都会自动向你的邮箱发送告知邮件,真的是足够人性化了。
四、总结
本文对Loguru库相关主要特性进行了简要概述,如果需要了解其更详细的特性说明,可参考官方github。
推荐大家在日常生活中多多使用Loguru库进行日志处理工作。
loguru官方网站: https://loguru.readthedocs.io/en/stable/index.html
api文档: https://loguru.readthedocs.io/en/stable/api.html
项目地址:https://github.com/Delgan/loguru
来源:https://blog.csdn.net/hubing_hust/article/details/128402860


猜你喜欢
- 一个asp显示当前日期农历的代码函数,效果 今天是:农历丁亥年(猪)八月十三。调用方便!Function nl()'获取当前系统时间
- 本文实例讲述了JavaScript实现五子棋游戏的方法。分享给大家供大家参考,具体如下:最近半个月一直在看深入的学习JavaScript,里
- 概述在我们使用内置打印函数print时,打印出的Python数据结构对象总是一行的输出的方式,这样对数据结构较复杂或数据较多的对象的显示并不
- class Node: def __init__(self,dataval=None): self.d
- 在备份数据库的时候,数据表中可能存在这样的值array('a'='b','c'='d
- 最近小编遇到一个奇葩问题,就是上传代码时拷贝vs里面的代码不能直接粘贴,否则空格会不符合要求,怎么解决此问题呢?下面小编给大家分享我的解决方
- 1.随机翻转(水平和垂直)torchvision.transforms.RandomVerticalFlip函数和torchvision.t
- 很长时间以来,一直想将自己的一些零碎的想法总结下,给自己一个完整的思维,也算是做个存档。一家之言,绝不敢说对别人会有什么帮助,对外人的层面上
- 本文实例为大家分享了javascript实现tab切换特效代码,供大家参考,具体内容如下效果图:实现代码:<!DOCTYPE html
- 本文实例讲述了python2 对excel表格操作。分享给大家供大家参考,具体如下:#!/usr/bin/env python2# -*-
- Python字符串模糊匹配Python的difflib库中get_close_matches方法包含四个参数x:被匹配的字符串。words:
- 提高性能有如下方法1、Cython,用于合并python和c语言静态编译泛型2、IPython.parallel,用于在本地或者集群上并行执
- 前言:大家都知道python项目中需要导入各种包(这里的包引鉴于java中的),官话来讲就是Module。而什么又是Module呢,通俗来讲
- 可能不少学习javascript在使用call,apply,callee时会感到困惑,以下希望对于你有所帮助:1、它是函数的方法或属性;2、
- 本文实例讲述了wxPython定时器wx.Timer简单应用。分享给大家供大家参考。具体如下:# -*- coding: utf-8 -*-
- 1. 什么是数据流grpc中的stream,srteam顾名思义就是一种流,可以源源不断的推送数据,很适合传输一些大数据,或者服务端和客户端
- 使用conda和pip批量安装Python包在debug Yolov5之前,需要按照其txt文件中指定的包的版本来指定安装工程需要的Pyth
- 本文实例讲述了JS+CSS实现仿支付宝菜单选中效果代码。分享给大家供大家参考。具体如下:这是一个漂亮的JS+CSS仿支付宝菜单,总体风格和形
- 怎样压缩sql server2000的数据库备份文件,像rar一样?小弟有一7m的sql server2000 数据库备
- 只要不是HTTP_REFERER来源于(google.com google.cn *.google.com *.google.cn baid