Search code examples
pythonpython-3.xloggingattributeerror

Python 'RequestsHandler' object has no attribute 'filters'


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'

Solution

  • 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 ...