<分区>
我正在尝试实现简单的日志处理程序,它使用 Python 的标准 logging
库将事件记录到远程服务器。因此,我创建了继承自 logging.Handler
的自定义类,称为 RemoteLogHandler
,它接受 LogRecord
并将其发送到远程服务器。处理程序以标准的 addHandler()
方式附加到根记录器。
from urllib import requests
class RemoteLogHandler(logging.Handler):
def emit(self, record):
remote_url = "http://foo.bar.baz"
req = request.Request(remote_url, data=record.msg)
request.urlopen(req, timeout=1)
这按预期工作,但当 remote_url 变得不可访问或开始响应缓慢时,显然会导致调用线程锁定。因此,我试图找到使此调用独立于调用线程的最佳方法。
我的想法:
- 包括一些使 http 请求异步的非标准库
- 按照概述使用 QueueHandler 和 QueueListener here
- 使用异步
所有这些解决方案对于实现如此简单的任务来说似乎都过于复杂/不必要。是否有一些开销更少的更好方法来使该处理程序成为非阻塞的?