Python的Loguru模块

1.Loguru模块的基本概念

Python logging模块定义了为应用程序和库实现灵活的事件日志记录的函数和类。程序开发过程中,很多程序都有记录日志的需求,并且日志包含的信息有正常的程序访问日志还可能有错误、告警等信息输出,Python的logging模块提供了标准的日志接口,可以通过它存储各种格式的日志,日志记录提供了一组便利功能,用于简单的日志记录用法。

使用Python Logging模块的主要好处是所有的Pyhon模块都可以参与日志记录,logging模块提供了大量具有灵活性的功能。

为什么要使用loguru?

简单且方便的帮助我们输出需要的日志信息

使用 Python 来写程序或者脚本的话,常常遇到的问题就是需要对日志进行删除.一方面可以帮助我们在程序出问题的时候排除问题,二来可以帮助我们记录需要关注的信息
但是,使用自带自带的 logging 模块的话,则需要我们进行不同的初始化等相关工作。对应不熟悉该模块的同学来说,还是有些费劲的,比如需要配置 Handler/Formatter 等。 随着业务的复杂度提升, 对日志收集有着更高的要求, 例如: 日志分类, 文件存储, 异步写入, 自定义类型等等

loguru 是一个 Python 简易且强大的第三方日志记录库,该库旨在通过添加一系列有用的功能来解决标准记录器的注意事项,从而减少 Python 日志记录的痛苦

2.Loguru模块的安装与特性

2.1 安装

[root@localhost ~]# pip3 install loguru # 安装模块
[root@localhost ~]# pip3 show loguru # 查看模块相关信息

Python的Loguru模块_linux

2.2 功能特性

  • 开箱即用,无需准备
  • 无需初始化,导入函数即可使用
  • 更容易的文件日志记录与转存/保留/压缩方式
  • 更优雅的字符串格式化输出
  • 可以在线程或主线程中捕获异常
  • 可以设置不同级别的日志记录样式
  • 支持异步,且线程和多进程安全
  • 支持惰性计算
  • 适用于脚本和库
  • 完全兼容标准日志记录
  • 更好的日期时间处理

3.Loguru模块的功能详解

1.开箱即用

# ======================
# -*-coding: Utf-8 -*-
# ======================
from loguru import logger

logger.debug('debug log')

上面的日志记录语句,默认向stderr(控制台)打印了一条输出语句,输出结果如下所示

Python的Loguru模块_Python_02

可以看出,loguru默认配置了一套日志输出格式,有时间、级别、模块名、行号以及日志信息,不需要手动创建 logger,直接使用即可,另外其输出还是彩色的,看起来会更加友好。所以我们不需要提前配置什么,直接用就可以

2.定义日志输出时的行为

要达到logging中的Handler(日志输出地)、Formattetr(日志输出格式)、Filter(过滤输出的日志数据的效果,以及定义输出日志级别等等,全都可以在logger.add()这一个函数中完成

# ======================
# -*-coding: Utf-8 -*-
# ======================
from loguru import logger
import os
# 当前文件的目录路径
dir_path = os.path.abspath(os.path.dirname(__file__))
# 日志路径
log_file_path = os.path.join(dir_path,'loguru.log')
# 配置日志输出到文件,输出最低等级为info,格式自定义
logger.add(log_file_path,format="{time} {level} {message}",level="INFO")
logger.debug('debug msg')
logger.info('info msg')
logger.warning('warning msg')
logger.error('error msg')

Python的Loguru模块_Python_03

日志文件的转存

# ======================
# -*-coding: Utf-8 -*-
# ======================
from loguru import logger
import os
# 当前文件的目录路径
dir_path = os.path.abspath(os.path.dirname(__file__))
# 日志路径
log_file_path = os.path.join(dir_path,'loguru_{time:%Y-%m-%d}.log')
# 配置日志输出到文件,输出最低等级为info,格式自定义
logger.add(log_file_path,format="{time} {level} {message}",level="INFO")
logger.debug('debug msg')
logger.info('info msg')
logger.warning('warning msg')
logger.error('error msg')

# 通过配置rotaion参数,指定文件转存的条件
logger.add(log_file_path,rotation="500MB") # 超过500MB自动分割文件
logger.add(log_file_path,rotation="12:00") # 每天固定时间定时创建文件
logger.add(log_file_path,rotation="1 week") # 每隔一段时间创建文件

# 通过配置retention参数,指定文件存储的条件
logger.add(log_file_path,retention="10 days") # 可以指定日志的保留时长 ,retention=“10 days” 每隔10天就会清理旧的日志,这样就不会造成内存的浪费

# 通过配置compression参数可以指定日志文件的压缩格式
logger.add(log_file_path,compression="gz")

有add()就有remove(),add()函数定义了日志输出行为后,会返回一个int类型的id,remove()函数通过这个id就可以删除之前在add()函数中所定义的东西

# ======================
# -*-coding: Utf-8 -*-
# ======================
from loguru import logger
import os
# 当前文件的目录路径
dir_path = os.path.abspath(os.path.dirname(__file__))
# 日志路径
log_file_path = os.path.join(dir_path,'loguru_{time:%Y-%m-%d}.log')
# 配置日志输出到文件,输出最低等级为info,格式自定义
logger.add(log_file_path,format="{time} {level} {message}",level="INFO")
# 删除刚才在add()自定义输出
logger.remove()
logger.debug('debug msg')
logger.info('info msg')
logger.warning('warning msg')
logger.error('error msg')

文件的日志内容是空白的

remove(handler_id=None): 会删除之前所有add()中自定义的东西,包括Loguru的默认配置