I have a FastAPI application. In this application I want to have a custom logger. In this logger I want to send async requests to some host.
I have an error:
RuntimeError: This event loop is already running
My code:
import asyncio
import functools
class HttpHandler(logging.Handler):
    """
    Logging Handler for fluent.
    Sends HTTP POST requests 
    """
    def __init__(self, tag: str, host: str, port: int):
        self.tag = tag
        self.host = host
        self.port = port
        self.loop = asyncio.get_event_loop()
        self.loop.run_forever()
    
        logging.Handler.__init__(self)
    
    async def emit(self, record: logging.LogRecord):
        payload = {} # some data
        future = self.loop.run_in_executor(None, functools.partial(requests.post, data={
            "url": self.host,
            "json": payload
        }))
        response = await future
In my fastapi app I want to use logger like this:
    @app.on_event("startup")
    async def startup():
        #replace fastapi handlers
        logger.handlers = ServiceLogger.get_logger_instance().handlers # special service that gives me custom logger
    @app.post("/some_url")
    async def foo(body=Depends(get_body)):
        logger.info("TEXT")
UPDATE: I was trying to apply aiohttp library
async def emit(self, record: logging.LogRecord):
        payload = {
            ...
            "message": record.message # log message
        }
        await aiohttp.post(self.host, json=payload)
But looks like it's not working because I see warning
RuntimeWarning: coroutine 'HttpHandler.emit' was never awaited
  self.emit(record)
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
 
    