2
我有一個多線程客戶端服務器軟件,並且在連接10個客戶端時調試有點困難。關於追蹤,我有幾個問題。如何追蹤多線程軟件?
- 如何追蹤軟件中的某個文件或類?
- 有沒有可能有一個日誌與時間戳和函數名稱,沒有任何其他信息和線程分隔?
- 是否有圖形跟蹤生成器?
我有一個多線程客戶端服務器軟件,並且在連接10個客戶端時調試有點困難。關於追蹤,我有幾個問題。如何追蹤多線程軟件?
import logging
import time
import pymongo
import hashlib
import random
DEBUG_MODE = True
class logger(object):
def __new__(cls, *args, **kwargs):
if DEBUG_MODE:
return object.__new__(cls, *args, **kwargs)
else:
return args[0]
def __init__(self, foo):
self.foo = foo
logging.basicConfig(filename='exceptions.log', format='%(levelname)s %(asctime)s: %(message)s')
self.log = logging.getLogger(__name__)
def __call__(self, *args, **kwargs):
def _log():
try:
t = time.time()
func_hash = self._make_hash(t)
col = self._make_db_connection()
log_record = {'func_name':self.foo.__name__, 'start_time':t, 'func_hash':func_hash}
col.insert(log_record)
res = self.foo(*args, **kwargs)
log_record = {'func_name':self.foo.__name__, 'exc_time':round(time.time() - t,4), 'end_time':time.time(),'func_hash':func_hash}
col.insert(log_record)
return res
except Exception as e:
self.log.error(e)
return _log()
def _make_db_connection(self):
connection = pymongo.Connection()
db = connection.logger
collection = db.log
return collection
def _make_hash(self, t):
m = hashlib.md5()
m.update(str(t)+str(random.randrange(1,10)))
return m.hexdigest()
它的使用蒙戈作爲存儲,但你可以寫任何後端。只需包裝你需要的功能並按照日誌。
讓我們從定義開始。 「跟蹤」是什麼意思?調試? – Denis 2013-05-13 10:41:02
最簡單的解決方案是知道什麼時候被調用。 – 2013-05-13 10:42:42
你可以編寫一個裝飾器,它將記錄包裝對象下的所有動作。 – Denis 2013-05-13 10:44:49