multiprocessing-logging
multiprocessing-logging copied to clipboard
how to use same logger when passed to a different process across all modules used ?
trafficstars
i create one logger with different handlers using the MultiProcessingHandler function and pass it to the different processes i create. my processes have a long workflow and i call many functions from different modules which i need to do some logs in. i currently pass the logger to each function or class i want to do logs on. i dont feel that it is very convenient to keep passing the logger all around.
so how can i use the logger i passed to the new process where ever needed without passing it around?
code :
from utils.multiprocessing_logging import MultiProcessingHandler
class InfoFilter(logging.Filter):
def filter(self, rec):
return rec.levelno == logging.INFO
# logger handler config
logger = logging.getLogger(__name__)
e_handler = logging.FileHandler(config.main_config['save_dir']+'log/'+config.main_config['error_log_file'])
e_handler.setLevel(logging.ERROR)
e_format = logging.Formatter('%(asctime)s - %(processName)s - %(levelname)s - %(message)s')
e_handler.setFormatter(e_format)
i_handler = logging.FileHandler(config.main_config['save_dir']+'log/'+config.main_config['info_log_file'])
i_handler.setLevel(logging.INFO)
i_format = logging.Formatter('%(asctime)s - %(processName)s - %(levelname)s - %(message)s')
i_handler.setFormatter(i_format)
i_handler.addFilter(InfoFilter())
# init logger handler
e_handler = MultiProcessingHandler(
'mp-error-handler',e_handler)
i_handler = MultiProcessingHandler(
'mp-info-handler',i_handler)
logger = logging.Logger('root')
logger.addHandler(e_handler)
logger.addHandler(i_handler)
process = mp.Process(target = start_tracking, args=(queue, logger,))
process.start()