qileilove

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

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

          在上一篇中解決了系統(tǒng)的性能問題,但寫log又引入了問題,多進(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來接受log,并負(fù)責(zé)寫log
            我覺得這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 的功能還沒實(shí)現(xiàn)。不過這個(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 閱讀(2137) 評(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)論排行榜

          主站蜘蛛池模板: 菏泽市| 尖扎县| 准格尔旗| 吉首市| 平和县| 福贡县| 塔河县| 莎车县| 沈丘县| 伊川县| 建昌县| 乌鲁木齐市| 邯郸县| 五大连池市| 孝义市| 营口市| 合肥市| 全椒县| 石首市| 灵川县| 栖霞市| 营口市| 花莲县| 乌兰浩特市| 田东县| 宁南县| 腾冲县| 淮滨县| 信阳市| 洛浦县| 宝兴县| 呼玛县| 林周县| 克山县| 榆中县| 漳州市| 苍山县| 疏附县| 丰宁| 安平县| 日照市|