Python日志怎么写_logging模块使用指南

1次阅读

Python日志怎么写_logging模块使用指南

python日志用 Logging 模块写,核心是先获取一个 logger,再配置输出位置、格式和级别——不直接用 print,才能在开发、测试、生产环境灵活控制日志行为。

1. 基础写法:5行搞定简单日志

最简可用的日志代码:

  • 调用 logging.basicConfig() 一次性设置全局基础配置(仅首次生效)
  • logging.debug/info/warning/Error/critical() 直接记录
  • 默认只显示 WARNING 及以上级别,想看到 INFO 需显式设 level=logging.INFO

示例:

“`python
import logging
logging.basicConfig(level=logging.INFO, format=’%(asctime)s – %(levelname)s – %(message)s’)
logging.info(“服务启动完成”)
logging.warning(“配置文件未找到,使用默认参数”)
“`

2. 推荐写法:用 logger 对象,避免污染根日志器

大型项目应创建独立 logger,而不是直接调用顶层函数,好处是可单独配置、避免被其他库干扰:

立即学习Python免费学习笔记(深入)”;

  • logging.getLogger(__name__) 获取命名 logger(推荐,模块名自动作标识)
  • 调用 setLevel() 设置该 logger 的最低捕获级别
  • 添加 Handler(如 StreamHandler 输出到控制台,FileHandler 写入文件)
  • 为每个 Handler 绑定 Formatter 控制输出格式

示例(控制台+文件双输出):

“`python
import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

# 控制台输出
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
ch.setFormatter(logging.Formatter(‘%(levelname)s – %(message)s’))

# 文件输出
fh = logging.FileHandler(‘app.log’)
fh.setLevel(logging.DEBUG)
fh.setFormatter(logging.Formatter(‘%(asctime)s – %(name)s – %(levelname)s – %(message)s’))

logger.addHandler(ch)
logger.addHandler(fh)

logger.debug(“数据库连接池初始化中…”)
logger.info(“用户登录成功:uid=1001”)
“`

3. 实用技巧:按需切换日志级别与输出目标

不同环境需要不同日志策略,靠配置而非改代码:

  • 开发时设为 DEBUG,生产环境通常用 WARNINGERROR
  • RotatingFileHandler 自动轮转日志文件,防止单个文件过大
  • TimedRotatingFileHandler 按天/小时切分日志(如每天生成 app.log.2024-06-15
  • 敏感信息(密码、Token)不要打日志;必要时用占位符或手动脱敏

4. 常见踩坑提醒

这些细节容易忽略,却直接影响日志是否生效:

  • basicConfig() 必须在任何 logging.xxx() 调用前执行,否则无效
  • 多个 basicConfig() 只有第一个起作用(它会跳过已存在的 handler)
  • logger 和 handler 都有 level,最终以“两者中更严格者”为准(取高值)
  • getLogger('a.b.c')getLogger('a.b') 是两个不同 logger,父子关系需显式设置传播(propagate=True 默认开启)
text=ZqhQzanResources