Loguru使用文档

Loguru是一个现代、快速、易于使用的Python日志记录库。它具有非常简单的语法,并提供了各种功能,如按时间旋转、多进程支持、格式化、级别处理等。本文将介绍如何在Python项目中使用Loguru进行日志记录。

安装Loguru

pip3 install loguru -i https://pypi.tuna.tsinghua.edu.cn/simple

开始记录日志

使用Loguru记录日志非常简单。只需要导入它并创建一个logger对象即可开始记录日志。

from loguru import logger

logger.info("This is an informational message")
logger.warning("This is a warning message")
logger.error("This is an error message")

# 2023-04-20 11:35:22.105 | INFO     | __main__:<module>:3 - This is an informational message
# 2023-04-20 11:35:22.105 | WARNING  | __main__:<module>:4 - This is a warning message
# 2023-04-20 11:35:22.105 | ERROR    | __main__:<module>:5 - This is an error message

在默认情况下,Loguru会将日志信息输出到控制台。如果需要将日志信息输出到文件,可以使用logger.add()方法。

将日志写入文件

from loguru import logger

logger.add("file.log", rotation="10 MB")
logger.info("This is an informational message")
logger.warning("This is a warning message")
logger.error("This is an error message")

以上代码将日志信息写入名为file.log的文件中。rotation="10 MB"表示当文件大小超过10MB时,将文件按时间旋转。

指定日志格式

使用logger.add()方法还可以指定日志格式。

from loguru import logger

logger.add("file.log", rotation="10 MB", format="{time} {level} {message}")
logger.info("This is an informational message")
logger.warning("This is a warning message")
logger.error("This is an error message")

# 以上代码将日志格式指定为"{time} {level} {message}",它将输出类似以下的日志信息:
# 2023-04-20 11:35:22.105 INFO This is an informational message
# 2023-04-20 11:35:22.105 WARNING This is a warning message
# 2023-04-20 11:35:22.105 ERROR This is an error message

可以在日志格式中使用各种占位符,如{time}{level}{message}等。占位符的完整列表可以在Loguru文档中找到。

处理不同级别的日志信息

使用Loguru还可以处理不同级别的日志信息。默认情况下,Loguru定义了以下级别:

  • TRACE

  • DEBUG

  • INFO

  • SUCCESS

  • WARNING

  • ERROR

  • CRITICAL

可以使用logger.level()方法来设置日志级别。例如,以下代码将日志级别设置为DEBUG

from loguru import logger

logger.level("DEBUG")
logger.debug("This is a debug message")
logger.info("This is an informational message")

# 2023-04-20 11:35:22.105 DEBUG    This is a debug message
# 2023-04-20 11:35:22.105 INFO     This is an informational message

可以看到,debug()方法输出了一个DEBUG级别的日志信息,而info()方法输出了一个INFO级别的日志信息。

处理异常

使用Loguru还可以处理异常。只需要将异常对象作为参数传递给日志记录方法即可。

from loguru import logger

try:
    1 / 0
except ZeroDivisionError as e:
    logger.exception(e)

"""
2023-04-20 11:35:22.105 ERROR    division by zero
Traceback (most recent call last):
  File "<ipython-input-2-123456>", line 2, in <module>
    1 / 0
ZeroDivisionError: division by zero

"""

可以看到,Loguru输出了一个ERROR级别的日志信息,并且在日志信息中包含了异常的详细信息。

装饰器

使用catch装饰器来自动记录该函数的异常和返回值。

from loguru import logger

logger.add("file.log", rotation="10 MB", compression="zip")

@logger.catch
def divide(x, y):
    result = x / y
    return result

result = divide(10, 0)

# 引发一个除以零的异常,并且Loguru将自动记录该异常的详细信息:
"""
2023-04-20 11:35:22.105 ERROR    An error occurred in 'divide'.
Traceback (most recent call last):
  File "<ipython-input-4-123456>", line 1, in <module>
    divide(10, 0)
  File "<ipython-input-3-123456>", line 5, in divide
    result = x / y
ZeroDivisionError: division by zero
"""

add参数说明

参数名参数类型参数示例参数说明是否必填sinkstr"logs/file.log"日志文件的路径。是formatstr"{time:YYYY-MM-DD at HH:mm:ss} - {message}"日志的格式。否rotationstr or int"1 week" or 604800按时间或大小轮换日志文件。否retentionstr"10 days"删除旧日志文件的时间。否compressionstr"zip"压缩旋转后的日志文件。否enqueueboolTrue如果为True,则异步记录日志。否backtraceboolTrue如果为True,则记录异常的详细信息。否diagnoseboolTrue如果为True,则记录日志记录器的诊断信息。否colorizeboolTrue如果为True,则在控制台输出的日志信息将带有颜色。否serializeboolTrue如果为True,则将日志记录的数据序列化。否catchboolTrue如果为True,则自动捕获函数调用的异常并记录到日志中。否levelstr"DEBUG"设置日志记录器的全局级别。可能的值包括:TRACEDEBUGINFOSUCCESSWARNINGERRORCRITICAL。否filterCallablelambda record: record["extra"].get("key") == "value"对日志记录进行过滤的可调用对象。否encodingstr"utf-8"设置日志文件的编码方式。默认为utf-8。否delayboolTrue如果为True,则延迟创建日志文件,直到第一次记录日志。如果为False,则在调用logger.add()时创建日志文件。否