Python中禁用Websockets包的日志记录器

4
我正在使用websockets包在Python中创建一个WebSocket服务器;同时我也在不同的日志级别上大量使用loggingwebsockets 文档提到了日志记录器配置,可以使用以下方式将其更改为ERROR日志级别。
     logger = logging.getLogger('websockets.server')
     logger.setLevel(logging.ERROR)
     logger.addHandler(logging.StreamHandler())

然而,无论我把它放在哪里(在导入下面,在websockets导入之前,在__main__中),它对我的代码没有任何影响。我想要有两个配置 - 一个全局日志配置和websockets服务器的记录器配置。

另一个选项是完全禁用websockets模块的日志记录,但我无法弄清楚如何做到这一点。有什么想法吗?

2个回答

5
原来不仅是 websockets.server 发出了大量的调试信息,还有其他的问题。我最终通过在根记录器配置中使用 %(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)

3

当您启动websocket时,请设置:

websocket.enableTrace(False) 

不会记录或显示任何DEBUG和心跳信息在控制台中。

我的示例代码:

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接