python - 在 Flask Socket.io 中禁用记录器

标签 python flask flask-socketio

我有一个使用 Flask 和 FlaskSocket.IO 2.8.4 的应用程序。当我初始化 SocketIO 时,我正在使用

#[...]

logging.basicConfig(level=logging.DEBUG,format='[%(asctime)s][%(levelname)s] - %(funcName)s: %(message)s')
logger = logging.getLogger(__name__)
handler = logging.FileHandler(__builtin__.config['dir']['log_file_handler'])
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('[%(asctime)s][%(levelname)s] - %(funcName)s: %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)

# Setting up flask external plugins
socketio = SocketIO(app, logger = False)

#[...]

if __name__ == '__main__':
socketio.run(app, port=8000)

无论如何,我日志中的输出有很多emitreceivehandle_event 行:

[2017-04-19 05:17:02,172][INFO] - receive: 1139f764dbe64a1ba6e1c8d95228400c: Received packet MESSAGE data 2/telescope,["AskForTimeEvent"]
[2017-04-19 05:17:02,173][INFO] - _handle_event: received event "AskForTimeEvent" from 1139f764dbe64a1ba6e1c8d95228400c [/telescope]
[2017-04-19 05:17:02,173][INFO] - emit: emitting event "clockEvent" to all [/telescope]
[2017-04-19 05:17:02,174][INFO] - send: 1139f764dbe64a1ba6e1c8d95228400c: Sending packet MESSAGE data 2/telescope,["clockEvent",{"hr":5,"sec":2,"min":17}]
[2017-04-19 05:17:03,287][INFO] - receive: 1139f764dbe64a1ba6e1c8d95228400c: Received packet MESSAGE data 2/telescope,["AskForTimeEvent"]
[2017-04-19 05:17:03,287][INFO] - _handle_event: received event "AskForTimeEvent" from 1139f764dbe64a1ba6e1c8d95228400c [/telescope]
[2017-04-19 05:17:03,288][INFO] - emit: emitting event "clockEvent" to all [/telescope]
[2017-04-19 05:17:03,288][INFO] - send: 1139f764dbe64a1ba6e1c8d95228400c: Sending packet MESSAGE data 2/telescope,["clockEvent",{"hr":5,"sec":3,"min":17}]

我正在以这种方式使用 emit 函数:

# this inside a function of an arbitrary class, works fine, but writes a lot of log!
with self.app.test_request_context('/telescope'):
        self.socketio.emit('someEvent', json.dumps(arr), namespace='/telescope')

我认为实例化 SocketIO 对象时的参数 logger=False 会阻止这些大的重复消息,但事实并非如此。如果有人可以帮助我,我将不胜感激。

S.

添加信息:我已经在 socketio.run 时尝试使用选项 log_output=False,但结果完全一样。

最佳答案

您正在应用的日志更改不起作用的原因是您通过 logging.basicConfig 应用的全局更改优先。

以下是如何覆盖这些默认值,仅适用于 Socket.IO 记录器:

logging.getLogger('socketio').setLevel(logging.ERROR)
logging.getLogger('engineio').setLevel(logging.ERROR)

这会将两个包设置为仅记录错误。

关于python - 在 Flask Socket.io 中禁用记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43487264/

相关文章:

python - 如何仅将 conftest.py 中的 fixture 应用于内部文件夹

Docker 日志命令不显示任何日志

python - Flask Dispatcher 中间件 session

python - 如何将自签名证书添加到 PyCharm?

flask-socketio - 服务器到服务器通信

python - macOS 卡塔利娜 : Python Quit unexpectedly error

python - 在python中将字典转换为数据框

python - 实时视频处理设计问题

python - 插入sqlite python不会更改表

python - 在 Windows bash 上 pip install flask 不起作用