Loguru 是一个用于 Python 的简单且强大的日志库。它的目标是使日志记录变得简单和优雅,同时提供许多有用的功能。Loguru 的主要特点包括:
- 简单易用:不需要复杂的配置,开箱即用。
- 丰富的功能:支持异步日志、日志文件轮转、日志格式化、过滤器等。
- 优雅的语法:通过
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