qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問(wèn) http://qaseven.github.io/

          用python做測(cè)試實(shí)現(xiàn)高性能測(cè)試工具(5)—多進(jìn)程寫log

          在上一篇中解決了系統(tǒng)的性能問(wèn)題,但寫log又引入了問(wèn)題,多進(jìn)程寫log會(huì)引起混亂。
            查詢了多進(jìn)程寫log 的方案, 主要有2種:
            利用多進(jìn)程的Queue,把log放到統(tǒng)一的有個(gè)log queue里面,一個(gè)單獨(dú)的線程寫log
            起一個(gè)單獨(dú)的socket server,由 這個(gè)server來(lái)接受log,并負(fù)責(zé)寫log
            我覺(jué)得這2重方案都太重了,很多寫log的地方就需要改動(dòng)了,希望找到一個(gè)方案能直接不改動(dòng)老代碼寫log的方式,開始考慮的是每個(gè)進(jìn)程單獨(dú)寫一個(gè)log,但這樣統(tǒng)計(jì)數(shù)據(jù)有點(diǎn)小不方便。 繼續(xù)探索到,有個(gè)開源的項(xiàng)目(https://launchpad.net/python-concurrent-log-handler),已經(jīng)實(shí)現(xiàn)了多進(jìn)程寫log,但目前只是實(shí)現(xiàn)了按文件大小RotatingFileHandler, 按時(shí)間rotate 的功能還沒(méi)實(shí)現(xiàn)。不過(guò)這個(gè)已經(jīng)足夠用了。
          try:
          from cloghandler import ConcurrentRotatingFileHandler as RFHandler
          except ImportError:
          from warnings import warn
          warn("ConcurrentLogHandler package not installed.  Using builtin log handler")
          from logging.handlers import RotatingFileHandler as RFHandler
          rotateHandler = RFHandler("sim.log", "a", 10*1024*1024, 5)
          formatter = logging.Formatter('%(asctime)s [%(processName)s %(threadName)s %(levelname)s %(module)s:%(lineno)d] %(message)s')
          rotateHandler.setFormatter(formatter)
          log = logging.getLogger()
          log.addHandler(rotateHandler)
          log.setLevel(20)
          rotateHandler = RFHandler("sim.log", "a", 10*1024*1024, 5)
            log文件名為sim.log,  文件到10M就會(huì)rotate, 最多保留5個(gè)文件
            formatter = logging.Formatter('%(asctime)s [%(processName)s %(threadName)s %(levelname)s %(module)s:%(lineno)d] %(message)s')   設(shè)置log輸出的格式, 包括時(shí)間,進(jìn)程名,線程名,模塊名字,代碼行數(shù)
            log.setLevel(20) 設(shè)置什么級(jí)別的log輸出,   CRITICAL 50; ERROR 40; WARNING 30; INFO 20; DEBUG 10, NOSET 0;
          import logging
          import time
          import multiprocessing
          class Customer(multiprocessing.Process):
          def __init__(self,mp_name):
          multiprocessing.Process.__init__(self,name=mp_name)
          def run(self):
          while 1:
          logging.debug(" I am here")
          time.sleep(1)
          for i in xrange(2):
          mp=Customer("customer"+str(i))
          mp.start()
            最后輸出log的例子是:
          2013-12-05 21:42:10,961 [customer0 MainThread DEBUG testqueue_old:115]  I am here
          2013-12-05 21:42:15,361 [customer1 MainThread DEBUG testqueue_old:115]  I am here
          相關(guān)文章
          用python做測(cè)試實(shí)現(xiàn)高性能測(cè)試工具(4)—系統(tǒng)架構(gòu)

          posted on 2014-01-08 10:43 順其自然EVO 閱讀(2135) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2014年1月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 策勒县| 建湖县| 沙坪坝区| 泾川县| 铜川市| 凌云县| 徐州市| 镇雄县| 黔西| 通州市| 昌宁县| 云南省| 大兴区| 嘉定区| 闽清县| 彭山县| 桃园市| 拜泉县| 鄂温| 香港| 齐河县| 禹城市| 大石桥市| 辽源市| 合作市| 汶川县| 郯城县| 元朗区| 广东省| 敦化市| 华阴市| 吉水县| 宁南县| 海门市| 石嘴山市| 惠来县| 裕民县| 双辽市| 信丰县| 肥城市| 仲巴县|