Python基础入门 Day115 使用 logging 模块进行日志管理

105次阅读
没有评论

共计 2442 个字符,预计需要花费 7 分钟才能阅读完成。

在程序开发中,打印调试信息是最常见的排错方式之一,但随着项目复杂度提升,仅靠 print() 已经不够用了。此时,Python 内置的 logging 模块 就显得非常重要。它能让我们更系统地记录程序运行状态、错误信息和执行流程。

一、为什么使用 logging
相比 print()logging 具备以下优势:

  1. 可以输出到控制台、文件或远程服务器;
  2. 可以设置不同的日志级别(如调试、警告、错误等);
  3. 可灵活控制日志格式、时间、模块名等信息;
  4. 可随时启用或关闭日志输出,而不影响主程序逻辑。

二、logging 模块的基础使用

import logging

# 配置基本日志输出
logging.basicConfig(level=logging.INFO)

logging.debug(" 这是调试信息 ")
logging.info(" 程序开始执行 ")
logging.warning(" 这是一个警告 ")
logging.error(" 发生错误!")
logging.critical(" 严重错误!程序即将退出 ")

执行后输出示例:

INFO:root: 程序开始执行
WARNING:root: 这是一个警告
ERROR:root: 发生错误!CRITICAL:root: 严重错误!程序即将退出

因为我们设置了 level=logging.INFO,所以 DEBUG 信息不会被打印出来。

三、日志级别说明

等级 常量 用途
DEBUG logging.DEBUG 详细信息,一般用于调试
INFO logging.INFO 程序运行过程的普通信息
WARNING logging.WARNING 程序中出现潜在问题
ERROR logging.ERROR 程序运行中出现错误
CRITICAL logging.CRITICAL 严重错误,程序可能无法继续运行

四、日志输出到文件
如果希望日志写入文件,可以通过 filename 参数实现:

logging.basicConfig(
    filename="app.log",
    level=logging.DEBUG,
    format="%(asctime)s - %(levelname)s - %(message)s"
)

logging.info(" 开始记录日志 ")
logging.error(" 发生错误,正在写入文件 ")

此时所有日志信息将保存到 app.log 文件中,格式类似:

2025-10-14 15:32:10,456 - INFO - 开始记录日志
2025-10-14 15:32:10,457 - ERROR - 发生错误,正在写入文件

五、自定义日志对象
在大型项目中,通常不直接使用 basicConfig,而是创建自己的 Logger 对象:

import logging

logger = logging.getLogger("MyApp")
logger.setLevel(logging.DEBUG)

# 创建控制台处理器
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)

# 创建文件处理器
file_handler = logging.FileHandler("myapp.log")
file_handler.setLevel(logging.ERROR)

# 定义日志格式
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)

# 添加到 logger
logger.addHandler(console_handler)
logger.addHandler(file_handler)

# 输出日志
logger.debug(" 调试模式信息 ")
logger.info(" 启动应用 ")
logger.error(" 发生错误,写入文件 ")

这样一来:

  • 控制台会输出 INFO 及以上的日志;
  • 文件中则只会保存 ERROR 及以上级别的日志。

六、按日期分割日志文件
当程序长期运行时,日志文件可能会非常大。我们可以使用 TimedRotatingFileHandler 自动按日期分割:

from logging.handlers import TimedRotatingFileHandler

logger = logging.getLogger("AppLogger")
handler = TimedRotatingFileHandler("timelog.log", when="midnight", interval=1, backupCount=7)
handler.suffix = "%Y-%m-%d.log"

formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.INFO)

logger.info(" 程序启动 ")

这会每天创建一个新的日志文件,并自动保留最近 7 天的记录。

七、实际应用技巧

  1. 开发阶段:设置日志级别为 DEBUG,方便查看细节。
  2. 生产环境:设置为 WARNING 或更高,避免输出过多信息。
  3. 统一日志格式:推荐包含时间、模块名、级别、信息四个要素。
  4. 集中管理:大型系统中可使用 ELK(Elasticsearch + Logstash + Kibana)统一分析日志。

八、小结
logging 模块是 Python 中最实用的调试与监控工具之一。
掌握其使用后,你可以在项目中轻松实现:

  • 控制台与文件日志分流
  • 动态日志级别控制
  • 自动切割日志文件
  • 精确记录错误堆栈与运行过程

下一节我们将学习如何将 logging 与异常捕获 (try...except) 结合,实现 自动错误记录机制,让程序更稳定可控。

正文完
 0
评论(没有评论)