亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > 解決python logging遇到的坑 日志重復打印問題

解決python logging遇到的坑 日志重復打印問題

熱門標簽:n400電話申請多少錢 地圖標注推廣單頁 女王谷地圖標注 ai地圖標注 長春人工智能電銷機器人官網 西藏快速地圖標注地點 如何在地圖標注文字 廈門crm外呼系統如何 百應ai電銷機器人鄭州

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中多個文件共用logger,重復打印問題的解決方案

問題背景現象

最近在項目中,需要用python的logging庫來將日志打印到文件中,然后將python腳本放到crontab中執行。所以寫了一個logger的簡單封裝。

如下:

#!/usr/bin/python
# -*- coding:utf-8 -*- 
import logging
import time
import os 
class Log(object):
 '''
封裝后的logging
 ''' 
 def __init__(self, logger=None, log_cate='search'):
  '''
   指定保存日志的文件路徑,日志級別,以及調用文件
   將日志存入到指定的文件中
  ''' 
  # 創建一個logger
  self.logger = logging.getLogger(logger)
  self.logger.setLevel(logging.DEBUG)
  # 創建一個handler,用于寫入日志文件
  self.log_time = time.strftime("%Y_%m_%d")
  file_dir = os.getcwd() + '/../log'
  if not os.path.exists(file_dir):
   os.mkdir(file_dir)
  self.log_path = file_dir
  self.log_name = self.log_path + "/" + log_cate + "." + self.log_time + '.log'
  # print(self.log_name)
 
  fh = logging.FileHandler(self.log_name, 'a') # 追加模式 這個是python2的
  # fh = logging.FileHandler(self.log_name, 'a', encoding='utf-8') # 這個是python3的
  fh.setLevel(logging.INFO)
 
  # 再創建一個handler,用于輸出到控制臺
  ch = logging.StreamHandler()
  ch.setLevel(logging.INFO)
 
  # 定義handler的輸出格式
  formatter = logging.Formatter(
   '[%(asctime)s] %(filename)s->%(funcName)s line:%(lineno)d [%(levelname)s]%(message)s')
  fh.setFormatter(formatter)
  ch.setFormatter(formatter)
 
  # 給logger添加handler
  self.logger.addHandler(fh)
  self.logger.addHandler(ch)
 
  # 添加下面一句,在記錄日志之后移除句柄
  # self.logger.removeHandler(ch)
  # self.logger.removeHandler(fh)
  # 關閉打開的文件
  fh.close()
  ch.close()
 
 def getlog(self):
  return self.logger

目的是讓所有用到logger的地方,只import這個封裝庫就行,然后直接調用。比如調用logger的

a.py

#!/usr/bin/python
# -*- coding:utf-8 -*-
 
from common.log import Log
log = Log().getlog()
log.info("I am a.py")

b.py

#!/usr/bin/python
# -*- coding:utf-8 -*-
 
from common.log import Log
log = Log().getlog()
log.info("I am b.py")

c.py

#!/usr/bin/python
# -*- coding:utf-8 -*-
 
import a
import b
from common.log import Log 
log = Log().getlog()
log.info("I am c.py")

此時執行c.py的結果如下:

➜ search git:(master) ✗ python c.py

[2019-01-14 15:58:35,807] a.py->module> line:6 [INFO]I am a.py

[2019-01-14 15:58:35,808] b.py->module> line:6 [INFO]I am b.py

[2019-01-14 15:58:35,808] b.py->module> line:6 [INFO]I am b.py

[2019-01-14 15:58:35,809] c.py->module> line:8 [INFO]I am c.py

[2019-01-14 15:58:35,809] c.py->module> line:8 [INFO]I am c.py

[2019-01-14 15:58:35,809] c.py->module> line:8 [INFO]I am c.py

可見,a.py, b.py,c.py的logger共用了,出現了重復打印。

問題原因分析

從現象可以得出,不同文件間的log系統是相互影響的,在a.py,b.py, c.py中,我們的調用方式是log = Log().getlog(), 即self.logger = logging.getLogger(logger),logger參數并未傳遞 , 所以得到的self.logger是RootLogger。

RootLogger是一個python程序內全局唯一的,所有Logger對象的祖先。所以我們對RootLogger的設定,自然會影響到所有的日志輸出。簡言之,就是先打開的文件中對log的設置,后打開的文件都會受到影響,都會走一遍logger的繼承關系。在這個示例中,b.py在a.py之后被import, 所以b.py會執行一次自己的logger,再執行一次a.py中打開的RootLogger, 以此類推.........

問題解決方式

不用默認的RootLogger, 給每個Logger都加個名字。

a.py

from common.log import Log
log = Log(__name__).getlog()
log.info("I am a.py")

b.py

from common.log import Log
log = Log(__name__).getlog()
log.info("I am b.py")

c.py

import b
import a 
from common.log import Log 
log = Log(__name__).getlog()
log.info("I am c.py")

c.py的最新執行結果:

➜ search git:(master) ✗ python c.py

[2019-01-14 16:24:12,008] b.py->module> line:6 [INFO]I am b.py

[2019-01-14 16:24:12,009] a.py->module> line:6 [INFO]I am a.py

[2019-01-14 16:24:12,009] c.py->module> line:10 [INFO]I am c.py

沒有重復了,符合預期。問題得以解決。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • python 實現logging動態變更輸出日志文件名
  • python (logging) 日志按日期、大小回滾的操作
  • Python日志打印里logging.getLogger源碼分析詳解
  • python 如何對logging日志封裝
  • Python logging自定義字段輸出及打印顏色
  • Python中logging日志的四個等級和使用
  • Python+logging輸出到屏幕將log日志寫入文件
  • Python logging模塊handlers用法詳解
  • 如何理解python接口自動化之logging日志模塊

標簽:亳州 黔東 綿陽 內江 渭南 興安盟 廊坊 拉薩

巨人網絡通訊聲明:本文標題《解決python logging遇到的坑 日志重復打印問題》,本文關鍵詞  解決,python,logging,遇到,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《解決python logging遇到的坑 日志重復打印問題》相關的同類信息!
  • 本頁收集關于解決python logging遇到的坑 日志重復打印問題的相關信息資訊供網民參考!
  • 推薦文章
    天天做日日爱| 久久国产影院| 成人免费观看的视频黄页| 美女免费黄网站| 国产综合成人观看在线| 日韩专区在线播放| 国产国语在线播放视频| 国产视频一区二区在线播放| 欧美日本韩国| 二级片在线观看| 欧美大片毛片aaa免费看| 欧美电影免费| 九九久久国产精品大片| 精品视频一区二区三区免费| 黄色福利片| 色综合久久天天综线观看| 欧美大片一区| 中文字幕一区二区三区 精品| 中文字幕一区二区三区 精品| 国产91丝袜高跟系列| 久久成人亚洲| 可以免费看污视频的网站| 国产麻豆精品免费视频| 91麻豆高清国产在线播放| 一级女性全黄久久生活片| 日韩免费在线观看视频| 精品视频在线观看一区二区三区| 久草免费在线视频| 午夜欧美成人香蕉剧场| 精品久久久久久免费影院| 欧美激情一区二区三区中文字幕| 可以免费在线看黄的网站| 精品视频免费看| 日本在线播放一区| 亚洲天堂在线播放| 免费一级生活片| 精品视频在线观看视频免费视频| 欧美1区| 亚洲天堂免费观看| 国产精品自拍一区| 国产成a人片在线观看视频| 一 级 黄 中国色 片| 国产成人欧美一区二区三区的| 日日夜人人澡人人澡人人看免| 精品国产一区二区三区久久久蜜臀| 色综合久久天天综合| 国产网站免费| 精品国产一区二区三区久久久狼| 97视频免费在线观看| 午夜在线亚洲| 四虎影视久久久| 久久精品大片| 黄视频网站在线观看| 亚欧乱色一区二区三区| 精品视频在线观看一区二区三区| 国产精品1024永久免费视频| 麻豆系列 在线视频| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 欧美日本免费| 成人影视在线观看| a级毛片免费观看网站| 色综合久久天天综线观看| 日本伦理黄色大片在线观看网站| 毛片电影网| 日韩中文字幕一区二区不卡| 欧美a免费| 美女免费精品高清毛片在线视 | 天天做日日干| 韩国毛片基地| 成人影视在线播放| 999久久狠狠免费精品| 国产一区二区精品尤物| 九九九网站| 精品视频在线观看免费| 二级特黄绝大片免费视频大片| 亚洲www美色| 四虎影视久久久| 青青久久国产成人免费网站| 精品在线观看国产| 精品国产一区二区三区国产馆| 99久久网站| 国产高清视频免费| 精品国产香蕉伊思人在线又爽又黄| 国产91丝袜在线播放0| 午夜在线亚洲| 成人免费福利片在线观看| 精品久久久久久中文字幕2017| 日韩在线观看网站| a级毛片免费全部播放| 91麻豆精品国产高清在线| 久久99欧美| 欧美另类videosbestsex久久| 青青久久网| 成人高清视频免费观看| 天天色色色| 精品在线观看国产| 精品国产一区二区三区久久久狼| 欧美日本免费| 精品视频一区二区三区免费| 青青青草视频在线观看| 国产伦精品一区三区视频| a级毛片免费观看网站| 九九九网站| 高清一级毛片一本到免费观看| 亚洲精品影院| 免费国产一级特黄aa大片在线| 国产成+人+综合+亚洲不卡| 一本高清在线| 日韩中文字幕在线播放| 国产成人精品综合| 99热精品在线| 国产高清在线精品一区二区| 欧美激情一区二区三区中文字幕| 美女被草网站| 久久国产精品永久免费网站| 免费的黄视频| 高清一级做a爱过程不卡视频| 欧美大片一区| 日韩av东京社区男人的天堂| 国产麻豆精品免费视频| 99久久精品国产国产毛片| 国产麻豆精品hdvideoss| 免费国产在线观看| 欧美爱色| 亚洲 欧美 成人日韩| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 亚洲精品中文字幕久久久久久| 一本高清在线| 久久国产精品自由自在| 日韩中文字幕在线观看视频| 国产伦理精品| 999久久狠狠免费精品| 国产不卡在线观看视频| 欧美国产日韩一区二区三区| 四虎影视库国产精品一区| 可以免费看毛片的网站| 精品视频在线观看一区二区三区| 欧美a级片免费看| 999精品视频在线| 美女被草网站| 91麻豆tv| 精品久久久久久免费影院| 国产极品白嫩美女在线观看看| 亚洲精品影院| 精品视频在线观看视频免费视频| 日日爽天天| 国产视频在线免费观看| 国产一区二区福利久久| 国产成人精品综合| 免费一级生活片| 欧美日本免费| 日韩专区在线播放| 日本免费乱理伦片在线观看2018| 久久久久久久久综合影视网| 成人影院一区二区三区| 免费一级片在线| 国产伦精品一区二区三区无广告 | 999久久狠狠免费精品| 日韩专区亚洲综合久久| 久草免费在线视频| 日韩欧美一及在线播放| 国产精品自拍在线观看| 久久精品人人做人人爽97| 日韩在线观看免费| 国产91丝袜在线播放0| 成人高清护士在线播放| 久久精品免视看国产成人2021| 999精品视频在线| 欧美日本免费| 日日爽天天| 国产网站免费观看| 国产成人啪精品| 国产不卡在线观看| 青草国产在线| 精品视频在线看| 成人a级高清视频在线观看| 日韩在线观看视频黄| 免费国产在线观看| 久久精品免视看国产明星| 一 级 黄 中国色 片| 国产伦精品一区二区三区在线观看| 欧美大片aaaa一级毛片| 国产a视频精品免费观看| 99久久精品国产国产毛片| 欧美激情在线精品video| 二级片在线观看| 99热视热频这里只有精品| 高清一级片| 九九精品影院| 久久精品店| 成人影视在线观看| 成人高清视频在线观看| 日本特黄特色aa大片免费| a级毛片免费观看网站| 欧美日本免费| 青青青草影院| 黄色短视频网站| 韩国毛片免费大片| 欧美国产日韩一区二区三区| 香蕉视频久久|