在Python中禁用Websockets软件包的Logger

时间:2018-09-11 18:14:30

标签: python-3.x logging websocket

我正在使用websockets包在python中创建一个websocket服务器;同时,我在不同的日志级别大量使用logging

websockets documentation提到了记录器配置,可以使用

将其更改为日志级别ERROR
     logger = logging.getLogger('websockets.server')
     logger.setLevel(logging.ERROR)
     logger.addHandler(logging.StreamHandler())

但是,这对我放置在我的代码中的任何位置(在导入下面,在websockets之前,在__main__中)都无效。我想要两种配置-一种是全局日志记录配置,另一种是websockets服务器的logger配置。

另一个选择是完全禁用websockets模块的日志记录,但是我不知道该怎么做。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

事实证明,发出大量调试消息的不仅是websockets.server,还有其他消息。我最终通过使用root记录器配置中的%(name)s字段来查找那些软件包,并发现websockets.protocol负责了其他消息。

logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s %(name)s %(levelname)-8s  %(message)s',
    datefmt='(%H:%M:%S)')

# disable all loggers from different files
logging.getLogger('asyncio').setLevel(logging.ERROR)
logging.getLogger('asyncio.coroutines').setLevel(logging.ERROR)
logging.getLogger('websockets.server').setLevel(logging.ERROR)
logging.getLogger('websockets.protocol').setLevel(logging.ERROR)

答案 1 :(得分:0)

启动网络套接字时,设置:

websocket.enableTrace(False) 

在控制台中不会记录或显示任何DEBUG和hart beat消息。

我的示例代码:

def start_websocket(url, listen_method):
"""
Start a websocket connection.

:param url: string
:param listen_method: method
"""
# Enable or Disable logging
websocket.enableTrace(False)

ws = websocket.WebSocketApp(
    url,
    on_message=listen_method,
    on_error=on_error,
    on_close=on_close
)

ws.on_open = on_open

ws.run_forever(ping_interval=3, ping_timeout=2)