Python 如何在mongoengine的烧瓶项目中使用pymongo.monitoring

Python 如何在mongoengine的烧瓶项目中使用pymongo.monitoring,python,flask,pymongo,mongoengine,Python,Flask,Pymongo,Mongoengine,我正试图通过flask和mongoengine向一个简单的REST web服务添加一些监控功能,但我发现我对imports和mongoengine如何在flask应用程序中工作缺乏了解。 我正在关注pymongo关于监控的文档: 我在单独的文件中定义了以下CommandListener: import logging from pymongo import monitoring log = logging.getLogger('my_logger') class CommandLogger

我正试图通过flask和mongoengine向一个简单的REST web服务添加一些监控功能,但我发现我对imports和mongoengine如何在flask应用程序中工作缺乏了解。 我正在关注pymongo关于监控的文档:

我在单独的文件中定义了以下CommandListener:

import logging
from pymongo import monitoring

log = logging.getLogger('my_logger')


class CommandLogger(monitoring.CommandListener):
    def started(self, event):
        log.debug("Command {0.command_name} with request id "
                   "{0.request_id} started on server "
                   "{0.connection_id}".format(event))

monitoring.register(CommandLogger())
我创建了一个application_builder.py文件来创建我的flask应用程序,代码如下所示:

from flask_restful import Api
from flask import Flask

from command_logger import CommandLogger # <----
from db import initialize_db
from routes import initialize_routes

def create_app():
    app = Flask(__name__)
    api = Api(app)
    initialize_db(app)
    initialize_routes(api)
    return app
来自flask\u restful导入Api
从烧瓶进口烧瓶
从MongoEngine的命令_loggerimport CommandLogger#中,在连接MongoEngine之前注册侦听器似乎很重要

要在MongoEngine中使用pymongo.monitoring,您需要确保 您正在建立数据库之前注册侦听器 连接(即呼叫连接)


这对我有用。我只是以与其他模块相同的方式初始化/注册它,以避免循环导入

#admin/logger.py
导入日志记录
从pymongo导入监视
log=logging.getLogger()
log.setLevel(logging.DEBUG)
logging.basicConfig(级别=logging.DEBUG)
类CommandLogger(monitoring.CommandListener):
#定义方法。。。
类ServerLogger(monitoring.ServerListener):
#def方法
类HeartbeatLogger(monitoring.ServerHeartbeatListener):
#def方法
def初始化_记录器():
monitoring.register(CommandLogger())
monitoring.register(ServerLogger())
monitoring.register(HeartbeatLogger())
monitoring.register(TopologyLogger())
#/app.py
从烧瓶进口烧瓶
从admin.toolbar导入初始化调试工具栏
从admin.admin导入初始化\u admin
从admin.views导入初始化视图
从admin.logger导入初始化\u记录器
从database.db导入初始化\u db
从restful导入Api
从resources.errors导入错误
app=烧瓶(名称)
#需要应用程序的导入
从resources.routes导入初始化路由
api=api(应用程序,错误=错误)
#数据库前的记录器
初始化日志记录器()
#数据库和路由
初始化数据库(应用程序)
初始化路由(api)
#管理与发展
初始化\u管理员(应用程序)
初始化视图()
初始化调试工具栏(应用程序)
#/run.py
从应用程序导入应用程序
app.run(debug=True)
然后在任何模块中

来自admin.logger导入日志
从db.models导入用户
#在某个类/视图/查询集内,或者以任何方式写入对象。。。
log.info('通过MongoEngine保存项目…')
用户(name='Foo').save()

我现在想弄清楚的是如何将Flask DebuggerToolbar的日志面板与这些侦听器的监视消息集成起来…

请参考问题中的相关驱动程序文档。@D.SM感谢您的评论,我的工作基于此文档,所以您会问为什么只有在导入代码时才运行代码?因为python只在导入的模块中执行代码。对于第二个问题,请在问题中添加实际结果和预期结果。您的注释只是提醒我,您需要`if name==“main”:`。还不太习惯。这基本上回答了我一半的问题,事实上,这是非常琐碎的。。。谢谢