婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

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

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

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

python 中 logging模塊 假如遇到 多線程 或者 多進(jìn)程 或者在web框架中自定義logging的話(一個請求就是一個獨立的線程)非常容易重復(fù)打印日志 和造成內(nèi)存崩潰,所以:

解決方法如下:

重寫日志方法 用類:

 class Log():
 import logging
 def __init__(self):
 self.logger = logging.getLogger(__name__)
 # 以下三行為清空上次文件
 # 這為清空當(dāng)前文件的logging 因為logging會包含所有的文件的logging
 logging.Logger.manager.loggerDict.pop(__name__)
 # 將當(dāng)前文件的handlers 清空 
 self.logger.handlers = []
 # 然后再次移除當(dāng)前文件logging配置
 self.logger.removeHandler(self.logger.handlers)
 # 這里進(jìn)行判斷,如果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')
 # 添加輸出格式進(jìn)入handler
 self.handler.setFormatter(formatter)
 # 添加文件設(shè)置金如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請求的時候 在接口處調(diào)用 然后引導(dǎo)傳參 千萬別做全局變量

補充:python中多個文件共用logger,重復(fù)打印問題的解決方案

問題背景現(xiàn)象

最近在項目中,需要用python的logging庫來將日志打印到文件中,然后將python腳本放到crontab中執(zhí)行。所以寫了一個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'):
  '''
   指定保存日志的文件路徑,日志級別,以及調(diào)用文件
   將日志存入到指定的文件中
  ''' 
  # 創(chuàng)建一個logger
  self.logger = logging.getLogger(logger)
  self.logger.setLevel(logging.DEBUG)
  # 創(chuàng)建一個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)
 
  # 再創(chuàng)建一個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)
  # 關(guān)閉打開的文件
  fh.close()
  ch.close()
 
 def getlog(self):
  return self.logger

目的是讓所有用到logger的地方,只import這個封裝庫就行,然后直接調(diào)用。比如調(diào)用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")

此時執(zhí)行c.py的結(jié)果如下:

➜ 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共用了,出現(xiàn)了重復(fù)打印。

問題原因分析

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

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

問題解決方式

不用默認(rèn)的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的最新執(zhí)行結(jié)果:

➜ 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

沒有重復(fù)了,符合預(yù)期。問題得以解決。

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

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

標(biāo)簽:亳州 黔東 綿陽 內(nèi)江 渭南 興安盟 廊坊 拉薩

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《解決python logging遇到的坑 日志重復(fù)打印問題》,本文關(guān)鍵詞  解決,python,logging,遇到,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《解決python logging遇到的坑 日志重復(fù)打印問題》相關(guān)的同類信息!
  • 本頁收集關(guān)于解決python logging遇到的坑 日志重復(fù)打印問題的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品一区二区视频| 91精品国产综合久久久蜜臀粉嫩 | 精品国产污网站| 成人免费一区二区三区视频| 天堂成人免费av电影一区| 国产黄色91视频| 欧美精品九九99久久| 中文字幕一区二区在线播放| 久久成人18免费观看| 欧美日韩国产精品自在自线| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲国产乱码最新视频| 成人免费视频国产在线观看| 日韩欧美一区二区不卡| 亚洲国产中文字幕| 99精品久久久久久| 中文字幕一区不卡| 国产精品888| 国产午夜亚洲精品羞羞网站| 美女视频第一区二区三区免费观看网站| 一本色道久久综合狠狠躁的推荐 | 成人a区在线观看| 久久精品一区二区三区av | 五月天精品一区二区三区| av一区二区三区在线| 亚洲国产精品99久久久久久久久| 精品一区免费av| 欧美v日韩v国产v| 精品一区二区免费在线观看| 91精品国产综合久久精品| 亚洲午夜电影在线| 欧美在线一区二区| 亚洲第一av色| 欧美日韩亚洲丝袜制服| 一区二区免费看| 欧美日韩国产综合一区二区三区| 亚洲一区影音先锋| 欧美探花视频资源| 偷拍一区二区三区四区| 日韩午夜电影av| 国产一区亚洲一区| 欧美国产日韩在线观看| 色综合网色综合| 亚洲综合一区二区精品导航| 欧美三级电影一区| 午夜精品久久一牛影视| 欧美一区二区成人| 国产九色sp调教91| 国产精品萝li| 欧美中文字幕一区| 久久不见久久见中文字幕免费| 久久综合色综合88| 99久久99久久综合| 亚洲成人激情av| 久久人人超碰精品| 色综合色综合色综合| 亚洲国产中文字幕在线视频综合| 日韩精品综合一本久道在线视频| 国产999精品久久| 亚洲视频小说图片| 777精品伊人久久久久大香线蕉| 精品无人码麻豆乱码1区2区| 国产精品久久久久久妇女6080| 色88888久久久久久影院野外| 日本vs亚洲vs韩国一区三区二区| 国产偷国产偷精品高清尤物| 日本韩国欧美一区二区三区| 蜜桃久久久久久| 亚洲人精品一区| 欧美精品一区二区三区一线天视频 | 丰满少妇久久久久久久| 亚洲自拍偷拍九九九| 久久亚洲精品国产精品紫薇| 一本久久精品一区二区| 麻豆久久一区二区| 亚洲裸体xxx| 久久久久久亚洲综合影院红桃| 91老师片黄在线观看| 久久99精品国产麻豆婷婷洗澡| 亚洲精品日韩一| 久久综合给合久久狠狠狠97色69| 在线免费观看一区| 成人黄色小视频| 久久www免费人成看片高清| 亚洲影院久久精品| 国产女主播在线一区二区| 在线播放91灌醉迷j高跟美女 | 亚洲国产日产av| 日本一区二区成人在线| 欧美一区二区免费视频| 91激情五月电影| 成人精品国产免费网站| 国产美女精品在线| 久草在线在线精品观看| 日韩电影在线观看一区| 亚洲无线码一区二区三区| 中文字幕一区二区日韩精品绯色| 精品粉嫩aⅴ一区二区三区四区| 欧美日韩精品福利| 欧美午夜在线观看| 一本一本久久a久久精品综合麻豆| 国产+成+人+亚洲欧洲自线| 久久精品国产成人一区二区三区| 婷婷综合另类小说色区| 亚洲一区二区三区美女| 亚洲黄色尤物视频| ㊣最新国产の精品bt伙计久久| 久久久精品蜜桃| 国产日产欧产精品推荐色 | 欧美韩国日本一区| 国产日产欧美一区| 国产亚洲精品资源在线26u| 26uuu久久天堂性欧美| 精品国产人成亚洲区| 久久综合999| 国产欧美日韩中文久久| 国产欧美一区二区三区沐欲| 国产欧美在线观看一区| 国产精品久久久久久久久免费相片 | 精品一区精品二区高清| 国精产品一区一区三区mba桃花| 日韩成人精品在线| 久久99国产精品久久99 | 91福利视频网站| 欧美在线视频日韩| 91精品一区二区三区在线观看| 日韩欧美成人一区| 久久综合999| 国产精品福利影院| 一区二区三区中文在线| 日韩精品欧美成人高清一区二区| 免费的国产精品| 国产高清不卡二三区| 99国产欧美久久久精品| 欧美日韩高清一区| 久久综合国产精品| 亚洲精品视频在线| 日韩精品国产欧美| 国产成人丝袜美腿| 欧美在线不卡视频| 精品国产1区二区| 亚洲欧美一区二区三区国产精品| 五月天中文字幕一区二区| 狠狠狠色丁香婷婷综合久久五月| www.亚洲激情.com| 欧美精品丝袜久久久中文字幕| 久久精品在这里| 亚洲国产欧美在线| 极品少妇xxxx精品少妇偷拍 | 国产精品主播直播| 色香色香欲天天天影视综合网| 欧美一区二区视频网站| 国产精品全国免费观看高清| 亚洲国产精品精华液网站| 国产麻豆精品在线| 色94色欧美sute亚洲线路二| 欧美精品一区二区高清在线观看| 亚洲欧美一区二区三区极速播放| 蜜臀精品一区二区三区在线观看 | 人人超碰91尤物精品国产| 国产成人精品一区二区三区四区| 欧美性色欧美a在线播放| 久久久久国产成人精品亚洲午夜| 亚洲国产一二三| 暴力调教一区二区三区| 日韩欧美国产综合在线一区二区三区| 日韩毛片高清在线播放| 狠狠狠色丁香婷婷综合激情 | 奇米影视一区二区三区小说| av在线不卡网| 久久久久久久精| 麻豆传媒一区二区三区| 在线观看视频一区二区| 国产日韩av一区| 国产美女视频一区| 日韩色视频在线观看| 午夜伦理一区二区| 91久久香蕉国产日韩欧美9色| 国产免费久久精品| 久久99日本精品| 91精品国产综合久久久蜜臀粉嫩| 亚洲一线二线三线久久久| 91麻豆蜜桃一区二区三区| 国产精品理论片| 东方欧美亚洲色图在线| 亚洲精品一区二区三区在线观看 | 蜜臀久久久99精品久久久久久| 欧美中文字幕一区二区三区| 亚洲欧美日韩久久精品| 99热这里都是精品| 国产精品国产三级国产aⅴ中文| 国产乱对白刺激视频不卡| 欧美一区二区视频观看视频| 图片区小说区区亚洲影院| 欧美电影在哪看比较好| 天天色综合天天| 日韩一本二本av| 国产精品99久久久| 国产精品灌醉下药二区| 成人不卡免费av|