Source code for ewoksutils.logging_utils.cleanup

import logging
import logging.handlers
import queue


[docs]def cleanup_logger(name: str): """Cleanup and delete a global python logger""" logging._acquireLock() # type: ignore try: # Remove reference from root logger = logging.root.manager.loggerDict.pop(name, None) if not isinstance(logger, logging.Logger): return # Remove references from place holders _cleanup_logger_instance(logger) for placeholder in list(logging.root.manager.loggerDict.values()): if isinstance(placeholder, logging.PlaceHolder): placeholder.loggerMap.pop(logger, None) # Remove references from children children = [ name for name, child in list(logging.root.manager.loggerDict.items()) if isinstance(child, logging.Logger) and child.parent is logger ] for child in children: cleanup_logger(child) # Remove local reference del logger finally: logging._releaseLock() # type: ignore
def _cleanup_logger_instance(logger: logging.Logger): """Cleanup a python logger""" for handler in logger.handlers: if isinstance(handler, logging.handlers.QueueHandler): handler.acquire() try: q = handler.queue if isinstance(q, queue.Queue): with q.mutex: q.queue.clear() finally: handler.release()