I made a HTTP request handler that uses a queue to allow it to use asyncio.
class RequestsHandler(logging.Handler):
def __init__(self, loop):
self._queue = queue.Queue
loop.create_task(self._drain_loop())
def emit(self, record):
log_entry = self.format(record)
self._queue.put(log_entry)
async def _drain_loop(self):
while True:
log_entry = self._queue.get()
payload = {
'text': log_entry
}
await requests.post(
'https://example.com/foo/bar',
data=payload)
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
handler = RequestsHandler(loop=asyncio.get_event_loop())
handler.setLevel(logging.INFO)
logger.addHandler(handler)
However, when I run logger.info('a log message')
, it returns:
Exception has occurred: AttributeError
'RequestsHandler' object has no attribute 'filters'
Agree with Bills answer, however I would recommend you to use properly functions of inheritance with function super()
class RequestHandler(logging.Handler):
def __init__(self, loop):
super(RequestHandler, self).__init__()
In empty __init__()
you can define level of the handler with parameter level
, eg. level = logging.WARNING
...