记录MongoEngine生成的原始查询

时间:2016-11-14 06:52:59

标签: python django mongodb logging mongoengine

我需要在Django应用程序中记录MongoEngine生成的所有查询。

我无法使用cursor._query(),因为我需要记录所有MongoEngine文档的查询。

日志记录应该在应用程序级别而不是数据库级别完成,因此将MongoDB分析级别设置为2将无济于事。

我发现了这个gist,这看起来很有帮助,但我无法理解。

是否有更简单的方法来编写中间件或以其他任何方式记录所有查询。

1 个答案:

答案 0 :(得分:1)

我在项目中使用了pymongo.monitoring

import logging
from pymongo import monitoring

class CommandLogger(monitoring.CommandListener):

    def started(self, event):
        logging.info("Command {0.command_name} with request id "
                 "{0.request_id} started on server "
                 "{0.connection_id}".format(event))

    def succeeded(self, event):
        logging.info("Command {0.command_name} with request id "
                 "{0.request_id} on server {0.connection_id} "
                 "succeeded in {0.duration_micros} "
                 "microseconds".format(event))

    def failed(self, event):
        logging.info("Command {0.command_name} with request id "
                 "{0.request_id} on server {0.connection_id} "
                 "failed in {0.duration_micros} "
                 "microseconds".format(event))

monitoring.register(CommandLogger())

更详细的信息,请参见documentation