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定义了以下级别:
TRACEDEBUGINFOSUCCESSWARNINGERRORCRITICAL
可以使用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"设置日志记录器的全局级别。可能的值包括:TRACE、DEBUG、INFO、SUCCESS、WARNING、ERROR和CRITICAL。否filterCallablelambda record: record["extra"].get("key") == "value"对日志记录进行过滤的可调用对象。否encodingstr"utf-8"设置日志文件的编码方式。默认为utf-8。否delayboolTrue如果为True,则延迟创建日志文件,直到第一次记录日志。如果为False,则在调用logger.add()时创建日志文件。否