Python 禁用Flask Socket.io中的记录器
我有一个使用Flask和FlaskSocket.IO 2.8.4的应用程序。当我初始化SocketIO时,我使用Python 禁用Flask Socket.io中的记录器,python,flask,flask-socketio,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__
#[...]
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)
无论如何,我的日志中的输出有许多emit
、receive
和handle\u事件
行:
[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
可以防止这些大的重复消息,但事实并非如此。如果有人能帮我,我将非常感激
美国
添加信息:我已经在
socketio.run
时尝试了log\u output=False
选项,但结果完全相同。您正在应用的日志更改不起作用的原因是,您通过日志记录.basicConfig
应用的全局更改优先
以下是如何覆盖这些默认值,仅适用于Socket.IO记录器:
logging.getLogger('socketio').setLevel(logging.ERROR)
logging.getLogger('engineio').setLevel(logging.ERROR)
这会将两个软件包设置为只记录错误。套接字io的版本是什么?因为登录版本
0.8.6
时出现错误。或者尝试使用engineio\u logge=False
。我检查并pythonsocketio==1.7.1
和python engineio==1.2.3
。我在SocketIO对象实例化和SocketIO.run中尝试了你的engineio\u logger=False
,但没有成功。效果非常好。再次感谢Miguel:)我必须在模块开始工作后添加:logging.getLogger('geventwebsocket.handler').setLevel(logging.ERROR),才能让它工作