IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【Python技巧】在Python中如何优雅地记日志 -> 正文阅读

[Python知识库]【Python技巧】在Python中如何优雅地记日志

1. 引言

在这里插入图片描述

在编写调试Python代码过程中,我们经常需要记录日志,通常我们会采用python自带的内置标准库logging,但是使用该库,配置较为繁琐。为了提升编程效率,本文重点介绍最近发现的一个宝藏第三方日志库Loguru,该库名字来自于印度语,含义为日志大师。
我们先来做个直观的对比,来说明Loguru的优雅之处。
使用python自带的logging,样例代码如下:

import logging
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s - %(levelname)s: %(message)s')  

logging.debug("This is logging  DEBUG test ")
logging.info("This is logging INFO test ")
logging.warning("This is logging  WARN test ")
logging.error("This is logging  ERROR test ")

样例输出如下:
在这里插入图片描述

使用Loguru库,样例代码如下:

from loguru import logger
logger.debug("This is loguru DEBUG test")
logger.info("This is loguru INFO test")
logger.warning("This is loguru WARN test")
logger.error("This is loguru ERROR test")

样例输出如下:
在这里插入图片描述

使用Loguru输出日志,终端执行后出现带颜色的日志,看一眼基本就爱上了,而且使用超级方便有木有。。。

2. 安装

直接使用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!")

3. 特性

我们参考官方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 my_function(x, y, z):
    return 1 / (x + y + z)

res = my_function(0,0,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}")  #定义日期样式
logger.info("time change")  #测试输出日期格式是否变换

此时 file.log里的 log信息如下:
在这里插入图片描述

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 日志,程序都会自动向你的邮箱发送告知邮件,真的是足够人性化了。



4. 总结

本文对Loguru库相关主要特性进行了简要概述,如果需要了解其更详细的特性说明,可参考官方github。
推荐大家在日常生活中多多使用Loguru库进行日志处理工作。

5. 参考

链接一

链接二


关注公众号《AI算法之道》,获取更多AI算法资讯。

在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 12:01:58  更:2021-08-07 12:02:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 10:04:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码