iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python控制台打印log输出重复的解决方法
  • 961
分享到

python控制台打印log输出重复的解决方法

python控制台打印logpython控制台输出pythonlog输出 2022-06-02 22:06:10 961人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

在我们使用log模块输出日志时,经常会遇到log输出重复的问题,如下: 先来看这个文件log.py的代码: 代码示例: ''' 功能描述:实现控制台和文件同时记录日志的功能 编写人:超哥 编写日期: 步骤分析

在我们使用log模块输出日志时,经常会遇到log输出重复的问题,如下:

先来看这个文件log.py的代码:


代码示例:
 
'''
功能描述:实现控制台和文件同时记录日志的功能
编写人:超哥
编写日期:
步骤分析:
  1-配置日志记录器名称
  2-配置日志级别
  3-配置日志格式(可以分别设置,也可以统一设置)
  4-创建并添加handler-控制台
  5-创建并添加handler-文件
  6-提供对外获取logger
'''
 
import logging
import sys
 
 
def log():
   # 1 - 配置日志记录器名称
   logger = logging.getLogger('AutoTest')
 
   # 2-配置日志级别
   logger.setLevel(logging.DEBUG)
 
   # 3-配置日志格式(可以分别设置,也可以统一设置)
   fORMat = logging.Formatter('%(name)s-%(asctime)s-%(message)s')
 
   # 4 - 创建并添加handler - 控制台
   sh = logging.StreamHandler()
   sh.setFormatter(format)
   logger.addHandler(sh)
 
   # 5 - 创建并添加handler - 文件
   fh = logging.FileHandler('test.log')
   fh.setFormatter(format)
   logger.addHandler(fh)
 
   # 6 - 提供对外获取logger
   return logger
 
if __name__ == '__main__':
   logger = log()
   logger.info('使用函数定义的log方法')

我们在同一目录下创建另外一个文件:

在我们导入写好的log.py文件


from xx目录 import log
 
 log().info('xxx1')
 
 log().info('xxx2')
 
 log().info('xxx3')

输出:

这个结果什么鬼?明明三句话,打印出来这么多,这其实是log在使用的常遇到的坑,通过debug你会发现,每次调用都会创建句柄,所以重复,如图:

第一句调用之后,handlers里面已经存在了两个handler,分别是控制台句柄StreamHandler和文件句柄FileHandler,下面图中是第二句调用添加句柄

执行后会发现handlers里面多了一个StreamHandler

怎么解决这种情况,有两个方案,咱们分别列出两种方案代码:

第一种,第一使用单例模式,在log.py文件中增加一行:logger = log() ,这句的作用就是提前实例化好对象,其他模块使用都适用该对象,所以别的模块导入语句要改成:from xxx包.log import logger ,然后使用logger.info('xxxx') 输出日志即可

   ……省略上方代码


     # 6 - 提供对外获取logg的方法
     return logger
 #增加一行
 logger = log()
 
 if __name__ == '__main__':
     logger = log()
     logger.info('使用函数定义的log方法')

导入:


from xx包 import logger
 
 
 logger.info('xxx1')
 
 logger.info('xxx2')
 
 logger.info('xxx3')

输出:

第二个方案:log.py每次判断handlers是否已存在


 ……
     # 4 - 创建并添加handler - 控制台
     sh = logging.StreamHandler()
     sh.setFormatter(format)
 
     # 5 - 创建并添加handler - 文件
     fh = logging.FileHandler('test.log')
     fh.setFormatter(format)
 
     #在新增handler时判断是否为空
     if not logger.handlers:
         logger.addHandler(sh)
         logger.addHandler(fh)
 
     # 6 - 提供对外获取logg的方法
     return logger
 
 if __name__ == '__main__':
     logger = log()
     logger.info('使用函数定义的log方法')

导入文件代码保持不变:


from xx包 import log
 
 log().info('xxx1')
 
 log().info('xxx2')
 
 log().info('xxx3')

输出:

针对面向对象的方案同样是以上两个,请自行解决

总结

到此这篇关于python控制台打印log输出重复解决的文章就介绍到这了,更多相关Python打印log重复内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python控制台打印log输出重复的解决方法

本文链接: https://www.lsjlt.com/news/10622.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python控制台打印log输出重复的解决方法
    在我们使用log模块输出日志时,经常会遇到log输出重复的问题,如下: 先来看这个文件log.py的代码: 代码示例: ''' 功能描述:实现控制台和文件同时记录日志的功能 编写人:超哥 编写日期: 步骤分析...
    99+
    2022-06-02
    python控制台打印log python控制台输出 python log输出
  • java控制台输出乱码解决方法
    java资源的编码都是utf8,使用utf8编译。但是控制台输出的时候,中文汉字还是会出现乱码。eclipse控制台eclipse控制台的编码默认为操作系统的编码,比如GBK。这时候就不能正确显示utf8编码的汉字,需要指定控制台的编码为u...
    99+
    2022-04-17
    java基础 java
  • java控制台中文输出乱码解决方法
    java资源的编码都是utf8,使用utf8编译。但是控制台输出的时候,中文汉字还是会出现乱码。eclipse控制台eclipse控制台的编码默认为操作系统的编码,比如GBK。这时候就不能正确显示utf8编码的汉字,需要指定控制台的编码为u...
    99+
    2020-03-23
    java
  • php打印输出中文乱码的解决方法
    这篇文章将为大家详细讲解有关php打印输出中文乱码的解决方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php打印输出中文乱码的解决办法:1、打开php.ini文件;2、找到“;default.char...
    99+
    2023-06-25
  • log4j控制台不打印日志的故障解决方案
    前言 接管了别的项目组的一个代码,在IDAE调试程序的过程中,发现log4j日志居然没有打印在控制台上,日志相关代码也没有问题。 在网上搜索了一圈,总结了一下个人解决这个问题的流程。 流程 1. 判断...
    99+
    2023-09-06
    log4j apache java
  • Python控制台输出俄罗斯方块的方法实例
    今天填一个坑,俄罗斯方块!! 俄罗斯方块的移动不难实现,但是旋转就不太容易实现,究其原因是因为Python中没有数组这种数据结构,所以不能用矩阵的公式。今天把旋转做出来了,刚好整理一...
    99+
    2022-11-12
  • Win7旗舰版打字的时候总是出现重复字符的解决方法
      Win7旗舰版用户最近遇到了一个问题,那就是打字的时候一直出现重复字符,键盘检查没有任何问题,那是什么原因导致的呢?其实这主要是键盘设置方面的问题,下面小编提供Win7系统一直打出重复字符的解决方法。   1.首先,...
    99+
    2023-06-17
    Win7 重复字符 字符 解决 舰版
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作