# Copyright (c) 2023 Egor Tensin # This file is part of the "cimple" project. # For details, see https://github.com/egor-tensin/cimple # Distributed under the MIT License. from contextlib import contextmanager import logging import logging.config import logging.handlers import multiprocessing as mp @contextmanager def child_logging_thread(): # Delegating logging to the parent logger. ctx = mp.get_context("spawn") queue = ctx.Queue() listener = logging.handlers.QueueListener(queue, logging.getLogger()) listener.start() try: yield queue finally: listener.stop() @contextmanager def configure_logging_in_child(queue): config = { "version": 1, "handlers": { "sink": { "class": "logging.handlers.QueueHandler", "queue": queue, }, }, "root": { "handlers": ["sink"], "level": "DEBUG", }, } logging.config.dictConfig(config) try: yield except Exception as e: logging.exception(e)