我有一个Django应用程序,它的每个API调用都与一个事务id相关联。我想为每个事务id创建单独的日志文件。 简单地说,我想有多个文件,我将用于日志记录。你知道吗
如何使用Django的内置日志系统来实现这一点?
我可以在一个记录器中有多个处理程序。但根据我的要求,FileHandlers必须在运行时添加,其文件名将是事务id。但问题是,如果一次运行4个事务,那么将向同一个记录器添加4个处理程序,并根据文档将日志发送到每个处理程序,从而生成1个事务日志文件,记录其余3个事务的日志。你知道吗
以下是我带来的:
class TransactionLogger:
def __init__(self, transaction_id):
self.logger = logging.getLogger('transaction_logger')
logger = self.logger
fileHandler = logging.FileHandler(transaction_id, mode='a')
formatter = logging.Formatter('%(levelname)s %(asctime)s %(filename)s:%(lineno)s - %(funcName)s() ] %(message)s')
fileHandler.setFormatter(formatter)
self.logger.addHandler(fileHandler)
self.logger.propagate = False
在每个事务开始时,我将记录器实例化为:
logger = TransactionLogger(transaction_id).logger
记录如下:
logger.debug("Hello World")
如何维护n个动态生成的日志文件,并根据事务id登录到每个文件,而不干扰其他文件。你知道吗
感谢您的帮助。你知道吗
我不会说它是一个好的设计来存储这样的日志。更好的方法是编写自定义格式,使每个日志中都有事务id,通过它可以过滤所有日志。你知道吗
不过,有两种方法可以实现这一点:
1)通过使用
logging._acquireLock()
和logging._releaseLock()
,或者您可以使用LOCK via LOCK,如here所述。你知道吗2)每次创建一个新的记录器(通过继承日志管理器并将新的记录器添加到自相矛盾)并在执行结束时删除它(这样系统就不会耗尽内存)。你知道吗
相关问题 更多 >
编程相关推荐