# 功能-日志
# 常用日志库
- Loguru (opens new window): 一个灵活且功能强大的日志库,支持多种日志格式和输出方式。
- structlog (opens new window): 一个结构化日志库,支持多种日志格式和输出方式。
- logging (opens new window): Python 标准库中的日志库,支持多种日志格式和输出方式。
- Graylog (opens new window): 一个分布式日志收集和分析系统,支持多种日志格式和输出方式。
- Logbook (opens new window): 一个灵活且功能强大的日志库,支持多种日志格式和输出方式。
相关文章
# Loguru
Loguru 是一个 Python 日志库,旨在简化日志记录的过程。它提供了简洁的 API 和丰富的功能,如自动格式化、多输出目标、异常捕获等。相比 Python 标准库的 logging,Loguru 更加易用且功能强大。
# 安装
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 中,compression 和 compression_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 minutes,1 hour,1 day,1 week,1 month,1 year,10 MB,100 KB,1000 等。
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}表示日志函数名
← Py 语法