新闻中心
python中如何用logging把日志输出到文件和控制台?
答案:通过添加FileHandler和StreamHandler,可实现日志同时输出到文件和控制台。首先创建logger并设置级别,防止重复添加handler需清空已有handler或禁用propagate;接着分别为文件和控制台创建handler,设定Formatter格式化输出,并可独立设置级别如文件DEBUG、控制台INFO;推荐使用dictConfig方式集中管理配置,便于维护。示例中日志写入app.log并输出到控制台,支持中文编码utf-8,避免重复日志与层级传递问题。

在 Python 中使用 logging 模块同时将日志输出到文件和控制台,需要为 logger 添加多个 handler:一个 FileHandler 用于写入文件,一个 StreamHandler 用于输出到控制台。
1. 基本配置示例
以下代码展示如何设置日志同时输出到文件 app.log 和控制台:
import logging
<h1>创建 logger</h1><p>logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG) # 设置日志级别</p><h1>防止重复添加 handler(重要)</h1><p>logger.propagate = False
if logger.handlers:
logger.handlers.clear()</p><h1>创建 handler:文件和控制台</h1><p>file_handler = logging.FileHandler('app.log', encoding='utf-8')
console_handler = logging.StreamHandler()</p><h1>设置日志格式</h1><p>formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)</p><h1>设置 handler 的日志级别(可不同)</h1><p>file_handler.setLevel(logging.DEBUG)
console_handler.setLevel(logging.INFO)</p><h1>添加 handler 到 logger</h1><p>logger.addHandler(file_handler)
logger.addHandler(console_handler)</p><h1>使用 logger</h1><p>logger.debug('这是调试信息')
logger.info('这是普通信息')
logger.warning('这是警告')
logger.error('这是错误')</p>2. 关键点说明
- 避免重复日志:如果多次运行脚本或在模块中定义 logger,可能重复添加 handler。清空已有 handler 或使用唯一命名可避免该问题。
- propagate=False:防止日志向上传递给父 logger(如 root),避免意外重复输出。
- 不同级别输出:可以为文件设置 DEBUG 级别,记录所有细节;控制台设为 INFO,只显示重要信息,便于调试与监控平衡。
-
编码设置:写入中文日志时,
FileHandler应指定encoding='utf-8'防止乱码。
3. 使用 dictConfig 简化配置(推荐)
对于复杂项目,可用 dictConfig 统一管理:
Python v2.4 中文手册 chm
Python v2.4版chm格式的中文手册,内容丰富全面,不但是一本手册,你完全可以把她作为一本Python的入门教程,教你如何使用Python解释器、流程控制、数据结构、模板、输入和输出、错误和异常、类和标准库详解等方面的知识技巧。同时后附的手册可以方便你的查询。
2
查看详情
import logging.config
<p>LOGGING_CONFIG = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
},
},
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': 'app.log',
'encoding': 'utf-8',
'formatter': 'standard',
},
'console': {
'level': 'INFO',
'class': 'logging.StreamHandle
r',
'formatter': 'standard',
},
},
'loggers': {
'my_logger': {
'handlers': ['file', 'console'],
'level': 'DEBUG',
'propagate': False
}
}
}</p><p>logging.config.dictConfig(LOGGING_CONFIG)
logger = logging.getLogger('my_logger')</p><p>logger.info('通过 dictConfig 配置的日志')</p>基本上就这些。只要正确添加两个 handler 并设置好格式与级别,就能灵活地把日志同时输出到文件和屏幕。
以上就是python中如何用logging把日志输出到文件和控制台?的详细内容,更多请关注其它相关文章!
# 如何将
# 陕西百度网站关键词排名
# 铁岭企业seo电话
# 安康网站seo
# 四川企业公司网站建设
# 贵溪网站制作推广
# vue.js seo prendee
# 佛山口碑seo报价
# 企业广告网站建设
# 韩国关键词排名查询网站
# 泰州需要网站建设的公司
# 组播
# 清空
# 源代码
# python
# 数据包
# 转换为
# 一本
# 已有
# 如何用
# 这是
# gate
# 格式化输出
# stream
# app
# 编码
# logging
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
win11如何卸载Windows更新补丁 Win11解决更新导致系统不稳定的问题【修复】
Golang切片为何属于引用类型_Golang slice底层结构与引用语义说明
顺丰国际快递查询 国际件官方查询入口
在哪找SublimeJ远程工具_SFTP插件配置教程
知音漫客正版漫画平台_知音漫客官网账号登录
Safari怎么安装扩展程序 浏览器插件安装与管理方法【详解】
微信群消息显示延迟如何解决 微信群消息刷新优化方法
红果短剧网页版官网入口 官方最新网址发布
TypeScript/J*aScript:高效查找数组中首个唯一ID对象
Excel组合图表怎么做 Excel创建柱状图与折线组合图教程【图表】
谷歌学术网站直达地址 谷歌学术搜索网页版一键进入
如何在网页中实现特定地点的随机图片展示
蛙漫画网页版全站入口 蛙漫热门作品免费浏览
ArrayList与LinkedList核心操作的Big-O复杂度分析
不同用户不同价格! 索尼开启账户个性化定价测试
荣耀Play7T运行卡顿解决_荣耀Play7T性能优化
如何在J*a中使用Locale处理多语言环境
sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件
SteamMachine定价或为699美元 大家想入手吗?
Word2013如何插入视频和音频媒体_Word2013媒体插入的多媒体支持
excel怎么制作工资条 excel快速生成工资条的方法
Pandas DataFrame 多条件优先级排序与排名
实现全屏滚动与导航点:专业教程
c++如何使用Catch2编写单元测试_c++简洁易用的BDD风格测试框架
React Hooks最佳实践:动态组件状态管理的组件化方案
Win10系统服务哪些可以禁用 Win10安全优化服务列表【干货】
蛙漫安全无毒 官方认证的绿色入口
win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】
韩小圈电脑版在线入口_网页版免费登录地址
自定义Bag-of-Words实现:处理带负号的词汇权重
抓大鹅无需下载版 抓大鹅秒玩版入口
探索高级语言到C/C++的转译路径:以Go为例及内存管理策略
J*aScript数据结构转换:将对象数组按类别分组
J*a里如何实现线程安全的懒加载单例_懒加载单例实现方法解析
j*a toString()的覆盖
Tabulator表格中精确实现日期时间排序的指南
漫蛙2在线漫画入口 漫蛙正版漫画网页版直达
海棠账号登录入口_登录海棠账户同步阅读记录
KFC套餐升级怎么获取优惠代码_KFC套餐升级活动与优惠代码获取方法
拼多多购物车商品数量无法修改如何处理 拼多多购物车操作优化方法
Python大型XML文件高效流式解析教程
AO3最新可访问网址 Archive of Our Own官方在线入口
手机屏幕碎了但能正常使用怎么办 手机外屏碎裂的修复建议
汽水音乐网页版使用入口_汽水音乐电脑版播放指南
支付宝解绑银行卡步骤_支付宝如何解除绑定银行卡
如何有效阻止外部脚本意外修改内联样式的高度属性
qq游戏网页版直接玩_qq游戏免下载快速入口
谷歌浏览器浏览体验优化_谷歌浏览器新版直连永久可用提示
中兴Axon42Ultra怎样在文件App筛图_iPhone中兴Axon42Ultra文件App筛图【图片筛选】
J*a中实现Go语言select通道多路复用机制


2025-11-26
浏览次数:次
返回列表
r',
'formatter': 'standard',
},
},
'loggers': {
'my_logger': {
'handlers': ['file', 'console'],
'level': 'DEBUG',
'propagate': False
}
}
}</p><p>logging.config.dictConfig(LOGGING_CONFIG)
logger = logging.getLogger('my_logger')</p><p>logger.info('通过 dictConfig 配置的日志')</p>