Python配置日志格式教程_统一日志规范
发布时间 - 2026-01-11 00:00:00 点击率:次Python日志配置核心是通过basicConfig或Formatter+Handler统一格式,推荐含时间、级别、模块名、行号和消息的结构化输出,兼顾可读性与机器解析;需注意调用时机、第三方库适配及生产环境输出目标选择。
Python中配置日志格式,核心是通过logging.basicConfig()或Formatter对象定义输出样式,让所有日志具备时间、级别、模块名、行号和消息等统一字段,便于排查问题和集中采集。
用basicConfig快速统一基础格式
适合脚本或简单项目,一行代码即可生效(注意:仅首次调用有效):
import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s [%(levelname)-5s] %(name)s:%(lineno)d - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)说明:
%(asctime)s:自动注入格式化后的时间,依赖datefmt[%(levelname)-5s]:左对齐、占5字符宽的级别名(如 INFO、ERROR)%(name)s:记录器名(默认为root,可自定义)%(lineno)d:日志所在源码行号,调试时非常关键- 该配置会影响所有未单独设置handler的logger
用Formatter+Handler精细控制多输出目标
当需同时输出到控制台和文件,并且格式/级别不同,推荐显式创建Handler:
import logginglogger = logging.getLogger('myapp') logger.setLevel(logging.DEBUG)
控制台输出(简洁格式)
console_handler = logging.StreamHandler() console_formatter = logging.Formatter( '%(levelname)s - %(message)s' ) console_handler.setFormatter(console_formatter) logger.addHandler(console_handler)
文件输出(完整格式,含时间与位置)
file_handler = logging.FileHandler('app.log', encoding='utf-8') file_formatter = logging.Formatter( '%(asctime)s | %(levelname)-8s | %(name)s:%(funcName)s:%(lineno)d | %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) file_handler.setFormatter(file_formatter) logger.addHandler(file_handler)
关键点:
- 每个Handler可绑定独立Formatter,实现“同日志、不同展现”
-
%(funcName)s能显示函数名,比%(name)s更准确定位逻辑位置 - 文件Handler建议加
encoding='utf-8'避免中文乱码 - 务必调用
logger.addHandler(),否则日志不会输出到该目标
统一规范建议(团队协作推荐)
为保障日志可读性与机器可解析性,建议固定以下字段顺序和格式:
- 时间戳:
%(asctime)s+datefmt='%Y-%m-%dT%H:%M:%S'(ISO 8601,利于ELK解析) - 日志级别:
[%(levelname)-5s],大写、
左对齐、固定宽度 - 模块标识:
%(name)s(按模块命名logger,如logging.getLogger(__name__)) - 代码位置:
%(filename)s:%(lineno)d或%(module)s.%(funcName)s:%(lineno)d - 业务消息:
%(message)s,避免换行,关键参数用logger.info("user_id=%s, action=%s", uid, action)结构化传入
避免常见坑
实际配置中容易忽略的细节:
-
basicConfig()必须在任何logger.xxx()之前调用,否则无效 - 若使用第三方库(如requests、sqlalchemy),它们自带logger,需单独设置其level(如
logging.getLogger("requests").setLevel(logging.WARNING)) - 生产环境禁用
StreamHandler,优先写文件或对接Syslog/Fluentd - 不要在format字符串里硬编码颜色或ANSI序列——终端渲染应由Handler(如
colorlog)负责,而非Formatter
# python
# 编码
# app
# 中文乱码
# stream
# asic
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用withoutEvents方法临时禁用模型事件
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
原生JS实现图片轮播切换效果
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
Python结构化数据采集_字段抽取解析【教程】
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
Laravel中的Facade(门面)到底是什么原理
Android使用GridView实现日历的简单功能
高端企业智能建站程序:SEO优化与响应式模板定制开发
Android自定义listview布局实现上拉加载下拉刷新功能
IOS倒计时设置UIButton标题title的抖动问题
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
Laravel怎么实现验证码(Captcha)功能
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
Laravel如何实现本地化和多语言支持?(i18n教程)
怎么用AI帮你设计一套个性化的手机App图标?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
如何安全更换建站之星模板并保留数据?
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
如何快速建站并高效导出源代码?
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
中山网站推广排名,中山信息港登录入口?
高端网站建设与定制开发一站式解决方案 中企动力
在线制作视频的网站有哪些,电脑如何制作视频短片?
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
JavaScript如何实现路由_前端路由原理是什么
javascript中对象的定义、使用以及对象和原型链操作小结
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
活动邀请函制作网站有哪些,活动邀请函文案?
,交易猫的商品怎么发布到网站上去?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
如何在云服务器上快速搭建个人网站?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
Laravel如何使用Blade模板引擎?(完整语法和示例)
手机软键盘弹出时影响布局的解决方法
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
如何正确下载安装西数主机建站助手?
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法


左对齐、固定宽度