将每个API调用记录到单独的fi中

2024-10-04 05:31:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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登录到每个文件,而不干扰其他文件。你知道吗

感谢您的帮助。你知道吗


Tags: 文件djangoselfid应用程序处理程序formatterlogging
1条回答
网友
1楼 · 发布于 2024-10-04 05:31:29

我不会说它是一个好的设计来存储这样的日志。更好的方法是编写自定义格式,使每个日志中都有事务id,通过它可以过滤所有日志。你知道吗

不过,有两种方法可以实现这一点:

1)通过使用logging._acquireLock()logging._releaseLock(),或者您可以使用LOCK via LOCK,如here所述。你知道吗

2)每次创建一个新的记录器(通过继承日志管理器并将新的记录器添加到自相矛盾)并在执行结束时删除它(这样系统就不会耗尽内存)。你知道吗

相关问题 更多 >