我正试图通过flask和mongoengine向一个简单的REST web服务添加一些监控功能,但我发现我对imports和mongoengine如何在flask应用程序中工作缺乏了解。 我正在关注pymongo关于监控的文档:https://pymongo.readthedocs.io/en/3.7.2/api/pymongo/monitoring.html
我在单独的文件中定义了以下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
仅当我在application_builder.py中导入:CommandLogger
时,监控才起作用。我想了解这里发生了什么,导入如何影响监控注册
另外,我想将monitoring.register(CommandLogger())
提取为函数,并在代码的后期调用它,比如def register(): monitoring.register(CommandLogger())
但这似乎不起作用,“注册”只在与CommandLogger
类位于同一个文件中时起作用
这对我有用。我只是以与其他模块相同的方式初始化/注册它,以避免循环导入
然后在任何模块中
我现在想弄清楚的是如何将Flask DebuggerToolbar的日志面板和来自这些监听器的监控消息集成在一起
从MongoEngine的doc来看,在连接MongoEngine之前注册侦听器似乎很重要
相关问题 更多 >
编程相关推荐