Bootstrap

【python学习】loguru日志库用法大全!附代码示例

Loguru 是一个用于 Python 的简单且强大的日志库。它的目标是使日志记录变得简单和优雅,同时提供许多有用的功能。Loguru 的主要特点包括:

  1. 简单易用:不需要复杂的配置,开箱即用。
  2. 丰富的功能:支持异步日志、日志文件轮转、日志格式化、过滤器等。
  3. 优雅的语法:通过 logger 对象的直接方法调用记录日志。

下面通过代码演示 Loguru 的几个最核心的功能:

安装 Loguru

可以通过 pip 安装 Loguru:

pip install loguru

基本使用

from loguru import logger

# 记录不同级别的日志
logger.debug("这是一个调试消息")
logger.info("这是一个信息消息")
logger.success("这是一个成功消息")
logger.warning("这是一个警告消息")
logger.error("这是一个错误消息")
logger.critical("这是一个关键错误消息")

日志输出到文件

from loguru import logger

# 添加一个日志文件输出,并设置轮转
logger.add("file.log", rotation="500 MB")  # 文件大小达到500MB时轮转

logger.info("这条消息将会记录到文件中")

日志格式化

from loguru import logger

# 设置日志格式
logger.add("file.log", format="{time} {level} {message}", rotation="500 MB")

logger.info("这是一条格式化的日志消息")

日志过滤

from loguru import logger

# 过滤某个级别的日志
logger.add("file.log", filter=lambda record: record["level"].name == "INFO")

logger.debug("这条消息不会被记录")
logger.info("这条消息会被记录")
logger.warning("这条消息也不会被记录")

异步日志

from loguru import logger
import asyncio

# 添加异步日志处理
logger.add("async_file.log", enqueue=True)

async def main():
    logger.info("这是一个异步日志消息")
    await asyncio.sleep(1)

asyncio.run(main())

日志异常处理

from loguru import logger

def error_function():
    x = 1 / 0

# 捕获并记录异常
try:
    error_function()
except ZeroDivisionError:
    logger.exception("捕获到一个除零错误")

Loguru 的 API 非常直观,使得记录日志变得简单高效。这些示例展示了它的基本用法,可以根据实际需求进行更复杂的配置和使用。

Response:

from loguru import logger

# 记录不同级别的日志
logger.debug("这是一个调试消息")  # 输出: 2024-07-26 10:00:00.000 | DEBUG    | __main__:1 - 这是一个调试消息
logger.info("这是一个信息消息")  # 输出: 2024-07-26 10:00:00.000 | INFO     | __main__:2 - 这是一个信息消息
logger.success("这是一个成功消息")  # 输出: 2024-07-26 10:00:00.000 | SUCCESS  | __main__:3 - 这是一个成功消息
logger.warning("这是一个警告消息")  # 输出: 2024-07-26 10:00:00.000 | WARNING  | __main__:4 - 这是一个警告消息
logger.error("这是一个错误消息")  # 输出: 2024-07-26 10:00:00.000 | ERROR    | __main__:5 - 这是一个错误消息
logger.critical("这是一个关键错误消息")  # 输出: 2024-07-26 10:00:00.000 | CRITICAL | __main__:6 - 这是一个关键错误消息

日志输出到文件

from loguru import logger

# 添加一个日志文件输出,并设置轮转
logger.add("file.log", rotation="500 MB")  # 文件大小达到500MB时轮转

logger.info("这条消息将会记录到文件中")  # 输出: 记录到 file.log 文件中: 2024-07-26 10:00:00.000 | INFO     | __main__:7 - 这条消息将会记录到文件中

日志格式化

from loguru import logger

# 设置日志格式
logger.add("file.log", format="{time} {level} {message}", rotation="500 MB")

logger.info("这是一条格式化的日志消息")  # 输出: 记录到 file.log 文件中: 2024-07-26 10:00:00 | INFO | 这是一条格式化的日志消息

日志过滤

from loguru import logger

# 过滤某个级别的日志
logger.add("file.log", filter=lambda record: record["level"].name == "INFO")

logger.debug("这条消息不会被记录")  # 不输出到文件中
logger.info("这条消息会被记录")  # 输出: 记录到 file.log 文件中: 2024-07-26 10:00:00.000 | INFO | 这条消息会被记录
logger.warning("这条消息也不会被记录")  # 不输出到文件中

异步日志

from loguru import logger
import asyncio

# 添加异步日志处理
logger.add("async_file.log", enqueue=True)

async def main():
    logger.info("这是一个异步日志消息")  # 输出: 记录到 async_file.log 文件中: 2024-07-26 10:00:00.000 | INFO | 这是一个异步日志消息
    await asyncio.sleep(1)

asyncio.run(main())

日志异常处理

from loguru import logger

def error_function():
    x = 1 / 0

# 捕获并记录异常
try:
    error_function()
except ZeroDivisionError:
    logger.exception("捕获到一个除零错误")  # 输出: 2024-07-26 10:00:00.000 | ERROR    | __main__:17 - 捕获到一个除零错误
                                           # Traceback (most recent call last):
                                           #   File "__main__.py", line 14, in <module>
                                           #     error_function()
                                           #   File "__main__.py", line 11, in error_function
                                           #     x = 1 / 0
                                           # ZeroDivisionError: division by zero

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;