如何使用Python的logging模块按日滚动记录Web日志并保存请求链路信息?

2026-05-07 01:550阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1189个文字,预计阅读时间需要5分钟。

如何使用Python的logging模块按日滚动记录Web日志并保存请求链路信息?

使用 `FileHandler` 仅能写入一个文件,基本不会进行日期滚动。真正按天生成类似 `app.log.2024-05-20` 这样的文件,必须使用 `TimedRotatingFileHandler —— 它是专门为时间维度滚动设计,不是依赖文件大小,而是基于 `when='midnight'` 触发每天午夜滚动分割。

常见错误是把 backupCount 设太小(比如 3),结果日志只留最近三天,审计时发现上周五的请求链路没了;或者漏设 encoding='utf-8',中文路径或日志内容一写就报 UnicodeEncodeError

  • when='midnight' 是最稳的选择,避免用 'D'(已弃用)或 'MIDNIGHT'(大小写敏感,错写就静默失效)
  • interval=1 必须配 when='midnight',单独设 interval 没用
  • utc=False(默认),别开 UTC,否则凌晨 0 点可能在你本地时间 7 点才切
  • 文件名里别硬编码日期,TimedRotatingFileHandler 自动追加后缀,起始文件就叫 app.log

Web 请求链路怎么塞进每条日志里?靠 LoggerAdapter + request_id

Flask 或 FastAPI 里,每个请求进来时生成唯一 request_id,但 logging 模块本身不感知上下文。

阅读全文
标签:Python

本文共计1189个文字,预计阅读时间需要5分钟。

如何使用Python的logging模块按日滚动记录Web日志并保存请求链路信息?

使用 `FileHandler` 仅能写入一个文件,基本不会进行日期滚动。真正按天生成类似 `app.log.2024-05-20` 这样的文件,必须使用 `TimedRotatingFileHandler —— 它是专门为时间维度滚动设计,不是依赖文件大小,而是基于 `when='midnight'` 触发每天午夜滚动分割。

常见错误是把 backupCount 设太小(比如 3),结果日志只留最近三天,审计时发现上周五的请求链路没了;或者漏设 encoding='utf-8',中文路径或日志内容一写就报 UnicodeEncodeError

  • when='midnight' 是最稳的选择,避免用 'D'(已弃用)或 'MIDNIGHT'(大小写敏感,错写就静默失效)
  • interval=1 必须配 when='midnight',单独设 interval 没用
  • utc=False(默认),别开 UTC,否则凌晨 0 点可能在你本地时间 7 点才切
  • 文件名里别硬编码日期,TimedRotatingFileHandler 自动追加后缀,起始文件就叫 app.log

Web 请求链路怎么塞进每条日志里?靠 LoggerAdapter + request_id

Flask 或 FastAPI 里,每个请求进来时生成唯一 request_id,但 logging 模块本身不感知上下文。

阅读全文
标签:Python