python logging 遇到的坑 日志重复打印问题的解决方法

【无标题】python中日志重复打印的解决方案 最近在写代码的过程中,遇到日志重复打印的问题,经过查阅资料和打断点分析,主要的原因是logger被多次声明,所以以下列出两种解决方案: #方案一,每次创建handler时先清空handler logger.handlers.clear() #方案二 #为了防止logger被创建很多个handler,这里在创建handler时先进行判断 if not logger.handlers: #handler为空,则创建handler # create console handler and set level to 阅读详情
python 中 logging模块 假如遇到多线程 或者多进程 或者在web框架中自定义logging的话(一个请求就是一个独立的线程)
非常容易重复打印日志 和造成内存崩溃
所以
解决方法如下:
重写日志方法 用类:

class Log():
import logging
def __init__(self):
self.logger = logging.getLogger(__name__)
# 以下三行为清空上次文件
# 这为清空当前文件的logging 因为logging会包含所有的文件的logging
logging.Logger.manager.loggerDict.pop(__name__)
# 将当前文件的handlers 清空
self.logger.handlers = []
# 然后再次移除当前文件logging配置
self.logger.removeHandler(self.logger.handlers)
# 这里进行判断,如果logger.handlers列表为空,则添加,否则,直接去写日志
if not self.logger.handlers:
# loggger 文件配置路径
self.handler = logging.FileHandler(os.getcwd() + '/logger/%s_log/%s_score.log' % (str(dt.date.today()), str(dt.date.today())))
# logger 配置等级
self.logger.setLevel(logging.DEBUG)
# logger 输出格式
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(message)s')
# 添加输出格式进入handler
self.handler.setFormatter(formatter)
# 添加文件设置金如handler
self.logger.addHandler(self.handler)

# 以下皆为重写方法 并且每次记录后清除logger
def info(self,message=None):
self.__init__()
self.logger.info(message)
self.logger.removeHandler(self.logger.handlers)

def debug(self,message=None):
self.__init__()
self.logger.debug(message)
self.logger.removeHandler(self.logger.handlers)

def warning(self,message=None):
self.__init__()
self.logger.warning(message)
self.logger.removeHandler(self.logger.handlers)

def error(self,message=None):
self.__init__()
self.logger.error(message)
self.logger.removeHandler(self.logger.handlers)

def critical(self, message=None):
self.__init__()
self.logger.critical(message)
self.logger.removeHandler(self.logger.handlers)

亲测有效
另外 模块尤其注意 例如web请求的时候 在接口处调用 然后引导传参 千万别做全局变量

记一个python logging模块打印日志打印两次、多次的问题 1.简介 使用logging模块打印日志,封装了获取logger的方法 #获取指定房间的日志记录器 def get_logger(desk): #获取日志记录器 logger = logging.getLogger(desk) logger.setLevel(logging.INFO) #滚动日志处理器 handler = RotatingFileHandler("log/"+desk+' 阅读详情

相关推荐

STM32--LoRa通信模块

模块根据MD0的配置与AUX引脚的状态会进入不同的功能其中在通信功能下,包含4种工作模式。

qq_47258284的博客 1万+

Python Logging装饰器输出重复日志

当Python装饰器作为日志记录器时,意外导致日志重复输出

A二十一画的博客 1245

VTK学习(入门级教程,包括安装和使用)~持续更新中

说明:研究QT+VTK有段时间了,准备把学到的东西分享给大家,这篇博客以VS+QT+VTK为主进行展开学习的。

HXX904的博客 4756

python3 logging详解_python logging模块书写日志以及日志分割详解

本文范例是书写两个日志:错误日志(ERROR级别)和运行日志(DEBUG级别),其中运行日志每日凌晨进行分割import logging,datetime,logging.handlersfrom conf import settingsif __name__ == "__main__":#两个日志,错误日志和运行日志,输出文件路径及文件名error_log = settings.ERROR_LO...

weixin_39559119的博客 437

特斯拉 Model 3解析(九)特斯拉 Model 3 自动驾驶域控制器硬件架构

硬件层:车规级高密度主板 → PI/SI优化到极致传感器层:三目摄像头主导视觉,雷达补充冗余,超声波保证近距设计理念:依靠芯片算力最大化视觉潜力,而不是堆传感器这套思路的优点是:成本可控、量产快、迭代快。缺点是:极端场景下感知鲁棒性不足。纯视觉方案短期可行,但中长期必然要重新引入高分辨率雷达甚至固态LiDAR作为冗余。电源/信号完整性会越来越关键,未来域控板设计会越来越像数据中心服务器。

weixin_43199439的博客 1784

华为OD机考双机位C卷 - 区间交集(Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 区间交集

算法大师! 1136

python 类变量 none 内存泄露_解决Python中由于logging模块误用导致的内存泄露

首先介绍下怎么发现的吧, 线上的项目日志是通过 logging 模块打到 syslog 里, 跑了一段时间后发现 syslog 的 UDP 连接超过了 8W, 没错是 8 W. 主要是 logging 模块用的不对我们之前有这么一个需求, 就是针对每一个连接日志输出当前连接的信息, 所以每一个 连接就创建了一个日志实例, 并分配一个 Formatter, 创建日志实例为了区分其他连接 所以我就简单...

weixin_39934085的博客 465

YOLO26涨点改进 | 全网独家,注意力创新改进篇 | Arxiv2025 | YOLO26引入MSLA多尺度线性注意力模块,高效提取多尺度特征和建模长程依赖,含多种创新改进,助力有效涨点

本文提出了一种多尺度线性注意力模块(MSLA)来优化YOLO26模型。MSLA通过并行使用不同尺寸的深度可分离卷积(3×3至9×9)提取多尺度特征,并结合线性注意力机制高效建模全局依赖关系。该模块显著提升了模型对多尺度目标的检测能力,同时保持了轻量化特性。实验表明,MSLA能有效增强小目标检测和复杂场景下的分割精度。文章详细介绍了MSLA的网络结构、核心优势及实现代码,并提供了两种集成MSLA的YOLO26改进方案,为实时目标检测任务提供了高效解决方案。

Ai缝合怪、助力小伙伴高效发论文 294

python logging 用法

级别排序 日志等级(LEVEL) 描述 CRITICAL 打印critical级别,一个严重的错误,这表明程序本身可能无法继续运行 ERROR 打印error,critical级别的日志,更严重的问题,软件没能执行一些功能 WARNING 打印warning,error,critical级别的日志,一个迹象表明,一些意想不到的事情发生了,或表明一些问题在不久的将来(例如。磁盘空间低”),这个软件还能按预期工作 INFO 打印info,warning,error,critical级

roy8666的博客 243

Vue3 - H5实现省市区三四级联动组件,选择地址自定义省市区三级联动插件,弹框式多级联动选择器区域选择,vue3实现省市区三级联动地址选择组件(支持接口数据懒加载,样式精美漂亮,附带详细示例源码)

vue3实现省市区三级联动地址选择组件(附address文件),vue3实现省市区三级联动, 实现省、市、县地区三级联动功能,vue3省市区选择器,VUE3 h5如何实现省市区街道的四级联动选择,vue实现省市区选择联动,vue3城市三级联动(自定义组件)_VUE三级联动,插件省市区联动,vue如何实现省市区选择器,vue3怎样实现省市区地址三级联动,vue四级联动,vue3级联选择器,vue3实现选择省市区镇(街道)四级级联选择,包含三级级联选择,省市区街道三级四级联动选择器,VUE3自定义多列选择器省市

🏆 前端领域优质创作者 3068

倍福--RS232自由口实现

RS232/485通信协议是在现场中常用到的,比如触摸屏、温控模块等设备控控制器做通信,会常用到此类协议,本文介绍RS232/485自由口通信的实现,并用PC调试助手进行测试。 目 录 软硬件版本 3 1.1. 倍福Beckhoff 3 1.1.1. 控制器硬件 3 1.1.2. 控制器软件 3 硬件连接 3 2.1. PC COM介绍 3 2.2. RS232/RS485连接 3 3.2.1. N030…………. 4 3.2.2. N031…………. 4 2.3. 实际线路连接 5 PLC程序 7 3

weixin_41883890的博客 3284

彻底解决Flask日志重复打印问题:从原理到实践

本文详细分析了Flask应用中日志重复打印的常见问题及其根本原因,包括日志处理器重复添加、混用logging与app.logger、以及多线程或多进程初始化导致的日志重复。针对这些问题,文章提供了一套完整的解决方案,包括统一使用app.logger、确保日志只初始化一次、修复后台线程的日志、以及禁用Flask默认日志等。通过实施这些方法,开发者可以有效解决日志重复问题,提升日志系统的清晰度和效率。

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

python logging 日志重复打印两次

logging日志重复打印问题 问题描述 在查看项目文件输出的运行日志时发现每句日志都会打印两次(info和debug均出现此问题) 解决 工程文件中一般会配置log,解决方法是将参数propagate修改为False # -*- coding:utf-8 -*- """log_util.py ~~~~~~~~~~~~~~ 提供日志支持。 :copyrith: (c) 2020 Dingdang Cat :modified: 2020-9-28 """ import os import logging f

风吹半夏 4231

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

python 程序停止打印日志,解决python logging遇到的坑 日志重复打印问题

python 中 logging模块 假如遇到 多线程 或者 多进程 或者在web框架中自定义logging的话(一个请求就是一个独立的线程)非常容易重复打印日志 和造成内存崩溃,所以:解决方法如下:重写日志方法 用类:class Log():import loggingdef __init__(self):self.logger = logging.getLogger(__name__)# 以下...

weixin_42503009的博客 1540

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

logging日志重复打印问题

在做接口自动化,使用logging模块打印日志时,遇到一个坑:第一次调用打印一次,第二次调用打印两次,第三次调用打印三次。。。 修改前: def log(msg): logger = logging.getLogger("App") handler = logging.FileHandler('test.log') logger.setLevel(lo...

weixin_30632883的博客 1033

python日志打印两次_[已解决] Python logging 重复打印日志信息

问题描述问题代码如下:def get_logger(logger_name):"""得到日志对象"""logger = logging.getLogger(logger_name)logger.setLevel(logging.DEBUG)formatter = logging.Formatter('[ %(asctime)s ] - %(levelname)s - %(message)s')# ...

weixin_30916627的博客 4129

Python | 解决方案 | 多个文件共用logger,重复打印问题

项目中封装了logging库为log.py,实现既把日志输出到控制台, 又写入日志文件文件。 python3.7.3 文件和调用方式如下: log.py v1 #encoding = utf-8 ###  # @ Description: 日志封装文件  # @ Author: fyy  # @ Date: 2020-12-30 10:48:00.

小天使faith的专栏 9063

深度剖析 Python 日志重复打印问题

log重复打印存在两种情况:未定义logger(),默认使用了RootLogger,一个python程序内全局唯一的,所有Logger对象的祖先每次实例化返回的都是RootLogger对象自定义的log函数,每次调用都实例化,传入相同的,经验证使用了单例模型也就是说每次实例化返回的是同一个logger对象,然后每次都调用方法添加日志处理器导致handlers列表添加了相同的handler(注意:日志的打印由handler控制)以此类推,调用几次就会有几个handler,然后前面打印的log。

qq_31455841的博客 4641

关于python的日志打印(logging)代码演示【日志重复打印的坑已解决】

import logging, os from logging import handlers class Logger(object): level_relations = { 'debug':logging.DEBUG, 'info':logging.INFO, 'warning':logging.WARNING, 'error':logging.ERROR, 'crit':logging.CRITICAL

weixin_42603578的博客 420

使用tf.logging日志打印两遍问题

使用tf.logging日志打印两遍问题 问题描述、原因分析 import tensorflow as tf tf.logging.set_verbosity(tf.logging.INFO) import logging logging.basicConfig(level=logging.INFO) logging.info("----") tf.logging.info("==========...

zwglory的博客 3557

Scrapy logging日志重复输出的解决方法

如果是完全在scrapy流程中的日志,一般有三种输出方式。 from scrapy.log import logger logger.info("info") # 会抛出warning,警告scrapy.log已经被废弃,此时的logger为 scrapy.log # ScrapyDeprecationWarning: Module `scrapy.log` has been depreca...

Catastrophe 1958

14. python日志打印重复问题解决(3种思路)

一、 代码如下: # -*-coding:utf8-*- import logging class MyLogging(object): def __new__(cls, level='DEBUG', **channels): """ :param level: 日志输出等级--->str :param channels: ---> 日志输出渠道--->dict,如: {'file':'my_log.log','console':'

Following my own heart 2277

python3 logging模块基本使用方法,解决重复打印及输出中文乱码的问题

1、logging模块使用方法 logger提供了应用程序可以直接使用的接口; handler将(logger创建的)日志记录发送到合适的目的输出; filter提供了细度设备来决定输出哪条日志记录; formatter决定日志记录的最终输出格式。 import logging logger = logging.getLogger("test") # 定义对应的程序模块名name...

xugexuge的博客 3010

解决python log模块重复打印日志问题

解决python log模块重复打印日志问题 当多个python文件引用log时会导致打印重复日志,如下图; 原因是Logger类中的handlers列表中添加了多个对象; Logger类源码如下: 所以,要解决这个问题,我的思路是清除handlers列表中多余的对象; 思路步骤如下: 1、我的代码中往handlers列表添加了sh和th两个对象,代码如下 sh = logging.Strea...

shuyichao的博客 1613
上一篇: Restful理解
下一篇: golang gin框架跨域问题解决以及注解
Chelydra
博客等级 码龄10年 5粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值