Graceful Shutdown

Ensure buffered logs are flushed before exit.

Sync

from fapilog import runtime

with runtime() as logger:
    logger.info("work started")
    # ... do work ...
    logger.info("work done")
# stop_and_drain is called internally

Async

from fapilog import runtime_async

async def main():
    async with runtime_async() as logger:
        await logger.info("async work")

# drains on context exit

Manual drain

If you have a sync logger and need to drain explicitly:

import asyncio
from fapilog import get_logger

logger = get_logger()
logger.info("done")
asyncio.run(logger.stop_and_drain())

Settings

  • core.shutdown_timeout_seconds: max wait for the worker thread to complete during shutdown. The logger signals the dedicated worker thread to stop and joins with this timeout to avoid hangs.