import multiprocessing import logging import logging.handlers def worker(q: multiprocessing.Queue): handler = logging.handlers.QueueHandler(q) # To make it work one can do: # q._start_thread() # or # logger = logging.getLogger("dummy") # logger.setLevel(logging.DEBUG) # logger.addHandler(handler) # logger.info("Init queue") mp_logger = multiprocessing.get_logger() mp_logger.addHandler(handler) mp_logger.setLevel(logging.DEBUG) mp_logger.info("Hello!") if __name__ == '__main__': handler = logging.StreamHandler() logging_queue = multiprocessing.Queue() listener = logging.handlers.QueueListener(logging_queue, handler) listener.start() p = multiprocessing.Process(target=worker, args=(logging_queue,)) p.daemon = True p.start() p.join() listener.stop()