我有一个多线程客户端-服务器软件,连接 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()
它使用 mongo 作为存储,但您可以编写任何后端。只需包装您需要的功能并遵循日志即可。