# 功能-日志

# 常用日志库

相关文章

# Loguru

Loguru 是一个 Python 日志库,旨在简化日志记录的过程。它提供了简洁的 API 和丰富的功能,如自动格式化、多输出目标、异常捕获等。相比 Python 标准库的 loggingLoguru 更加易用且功能强大。

# 安装

pip install loguru

# 基本使用

from loguru import logger

# 默认输出到控制台
logger.info("This is an info message")
logger.error("This is an error message")

# 日志级别

loguru 一共有 6 个日志级别,分别是:

  • debug: 最低级别,用于调试信息.
  • info: 普通信息级别,用于记录程序正常运行时的关键信息。
  • success: 用于记录成功信息,比如数据库操作成功等。
  • warning: 用于记录警告信息,比如一些不严重的错误,但并不影响程序运行。
  • error: 用于记录错误信息,比如一些严重的错误,会导致程序无法运行。
  • critical: 最高级别,记录程序运行中的严重错误,可能导致程序崩溃或无法继续运行。
  # 默认输出到控制台
  logger.trace("Trace message")
  logger.debug("Debug message")
  logger.info("Info message")
  logger.success("Success message")
  logger.warning("Warning message")
  logger.error("Error message")
  logger.critical("Critical message")

我们可以设置默认日志级别

logger.configure(level="INFO")

# 日志配置

日志除了可以输出到控制台,还可以输出到文件, 下面是输出到文件的配置项

logger.add(
    "logs/app.log",  # 日志文件路径
    rotation="10 MB",  # 当日志文件达到10MB时自动分割,也可以设置为时间间隔,比如"00:00"
    retention="10 days",  # 保留10天内的日志
    enqueue=True,  # 启用线程安全队列
    compression="zip",  # 使用zip压缩 默认为gzip 还可以设置为bz2
    compression_level=9,  # 压缩级别,9为最高 默认为6
    compression_format="zip",  # 压缩格式 默认为gzip 还可以设置为bz2
    compression_mode="zip",  # 压缩模式 默认为zip 还可以设置为bz2
    compression_path="logs/app.zip",  # 压缩文件存储路径
    format="{time} {level} {message}",  # 日志格式
    colorize=True,  # 启用颜色输出
    serialize=False,  # 是否序列化日志
    backtrace=True,  # 启用异常回溯
    diagnose=True,  # 启用诊断信息
    catch=True,  # 捕获未处理异常
    workers=1,  # 日志处理线程数
    filter="my_module",  # 日志过滤器
    level="INFO",  # 日志级别
)

Loguru 中,compressioncompression_mode 是两个不同的参数,但它们的值通常是相同的。可选压缩以及对比有:

压缩方式 压缩率 速度 内存占用 兼容性 适用场景
ZIP 通用
BZ2 大文件
GZIP 单文件
LZMA 极高 高压缩率
ZSTD 实时数据

当我们想设置每天按照不同的日志类型自动创建一个新的日志文件,并且保留最近 7 天的日志,可以这样配置

# 配置 INFO 级别的日志
logger.add(
    "logs/info_{time:YYYY-MM-DD}.log",  # 日志文件名格式,按天创建
    rotation="00:00",  # 每天午夜轮转
    retention="7 days",  # 保留最近7天的日志
    level="INFO",  # 只记录 INFO 及以上级别的日志
    format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}"  # 日志格式
)

# 配置 ERROR 级别的日志
logger.add(
    "logs/error_{time:YYYY-MM-DD}.log",  # 日志文件名格式,按天创建
    rotation="00:00",  # 每天午夜轮转
    retention="7 days",  # 保留最近7天的日志
    level="ERROR",  # 只记录 ERROR 及以上级别的日志
    format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}"  # 日志格式
)

rotation 参数可以设置为时间间隔,比如 10 minutes1 hour1 day1 week1 month1 year10 MB100 KB1000 等。

format 参数可以设置日志格式,比如 {time:YYYY-MM-DD HH:mm:ss} | {level} | {message}{time:YYYY-MM-DD HH:mm:ss} | {level} | {message} | {file} | {line} | {function} 等。

  • {time} 表示日志时间
  • {level} 表示日志级别
  • {message} 表示日志消息
  • {file} 表示日志文件名
  • {line} 表示日志行号
  • {function} 表示日志函数名