Loguru是一个功能强大且易于使用的开源Python日志记录库。它建立在Python标准库中的logging模块之上,并提供了更加简洁直观、功能丰富的接口。

Loguru的主要特点包括:

  • 简单易用:无需复杂的配置和定制即可实现基本的日志记录和输出。
  • 灵活的日志格式:支持自定义日志格式,并提供丰富的格式化选项。
  • 丰富的日志级别:支持多种日志级别,例如DEBUG、INFO、WARNING、ERROR和CRITICAL。
  • 多种日志目标:可以将日志输出到终端、文件、电子邮件、网络服务器等目标。
  • 强大的日志处理功能:支持日志过滤、格式化、压缩等功能。
  • 支持异步日志记录:能够极大地提升日志记录的性能。
  • 支持跨进程、跨线程的日志记录:可以安全地记录多进程、多线程应用程序的日志。

一、安装

pip install loguru

二、使用

(一)直接使用

通过导入本身封装好的logger 类就可以直接进行调用。

from loguru import logger

# 输出等级 DEBUG、INFO、WARNING、ERROR、CRITICAL
logger.debug("That's it, beautiful and simple logging!")
logger.info("That's it, beautiful and simple logging!")
logger.warning("That's it, beautiful and simple logging!")
logger.error("That's it, beautiful and simple logging!")
logger.critical("That's it, beautiful and simple logging!")

显示效果如下:


Loguru日志输出默认格式如下:

  • 时间戳:表示日志记录的具体时间,格式通常为年-月-日 时:分:秒.毫秒。
  • 日志级别:表示这条日志的严重性级别。
  • 进程或线程标识:表示日志来自哪个模块或脚本。 main 表示日志来自主模块。如果是其他文件会显示文件名。
  • 文件名和行号:记录日志消息的函数名和行号。
  • 日志消息:实际的日志内容,此外loguru支持使用颜色来区分不同的日志级别,使得日志输出更加直观.
支持{}变量
logger.info("If you're using Python {}, prefer {feature} of course!", 3.6, feature="f-strings")

日志等级

Loguru可以通过简单的函数调用来记录不同级别的日志,并自动处理日志的格式化和输出。这一特点可以让使用者专注于记录重要的信息,而不必关心日志的具体实现细节。Loguru支持的日志级别,按照从最低到最高严重性排序:

  • TRACE: 最详细的日志信息,用于追踪代码执行过程。Loguru默认情况下使用DEBUG级别作为最低日志记录级别,而不是TRACE级别。这是因为TRACE级别会产生大量的日志信息。
  • DEBUG: 用于记录详细的调试信息,通常只在开发过程中使用,以帮助诊断问题。
  • INFO: 用于记录常规信息,比如程序的正常运行状态或一些关键的操作。
  • SUCCESS: 通常用于记录操作成功的消息,比如任务完成或数据成功保存。
  • WARNING: 用于记录可能不是错误,但需要注意或可能在未来导致问题的事件。
  • ERROR: 用于记录错误,这些错误可能会影响程序的某些功能,但通常不会导致程序完全停止。
  • CRITICAL: 用于记录非常严重的错误,这些错误可能会导致程序完全停止或数据丢失。

(二)配置使用---add函数

使用基本的add() 方法就可以对logger 进行简单的配置,这些配置有点类似于使用 logging 时的 handler。

1.写入日志到特定文件

将日志输出到了log.txt文件中。

logger.add(sink='log.txt')
logger.debug("That's it, beautiful and simple logging!")
logger.info("That's it, beautiful and simple logging!")

TXT文件显示如下

2.日志的留存、压缩与清理

将日志写入到相应的文件中时,日志输出或记录时间较长,那么单个日志文件就太大,操作起来十分困难,这时可以对日志文件留存、压缩,甚至必要时清理。

rotation

可以将日志记录以大小、时间等方式分割或划分。

import os
from loguru import logger

LOG_FILE = "file_{time}.log"
logger.add(LOG_FILE, rotation = "200KB")
for n in range(10000):
    logger.info(f"test - {n}")

输出结果如下:

如果想每天12点时创建一个日志文件,可以用如下指令 :

logger.add("file_2.log", rotation="12:00")     # New file is created each day at noon
compression

可以将日志自动压缩以节约磁盘空间

import os
from loguru import logger

LOG_FILE = "file_{time}.log"
logger.add(LOG_FILE, rotation = "200KB",compression="zip")
for n in range(10000):
    logger.info(f"test - {n}")

将满足200K的log文件做成压缩文件,可见大小由200K变为了11K,大大节约了硬盘空间

retention

设置多久之间的文件可以被删除

logger.add("file_X.log", retention="10 days")  # Cleanup after 10 days

可以自动删除10天前的日志。

其他

记录到两个日志文件中

根据filter来进行区分logger的,再用logger.bind()来做logger的区分。

logger.add("gui.log",filter = lambda record:record["extra"]["name"]=="gui_log") # 向gui.log中保存["name"]="gui_log"的log文件
logger.add("serial.log",filter = lambda record:record["extra"]["name"]=="serial_log") # 向serial.log中保存["name"]="serial_log"的log文件

logger_gui = logger.bind(name="gui_log") # 添加 ["name"]的属性
logger_serial = logger.bind(name="serial_log") # 添加 ["name"]的属性

logger_gui.info("guis")
logger_serial.info("serial")

按照日志等级记录到不同文件

logger.add("info.log",level = "INFO",filter=lambda x: 'INFO' in str(x['level']).upper()
logger.add("error.log",level = "ERROR",filter=lambda x: 'ERROR' in str(x['level']).upper()

暂存

修改时间格式

logger.add("file.log", format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}")

只保存文件,不在console中输出

logger.remove(handler_id = None) # 清除之前的设置

参考:
https://loguru.readthedocs.io/en/stable/overview.html
https://www.jianshu.com/p/5aead7b6a7a9
https://www.cnblogs.com/luohenyueji/p/18276299