def set_connection(self, target): if self.transmit_handler != None: self.cancel_connection() self.transmit_handler = TransmitHandler(target) self.transmit_handler.set_origin_name(self._origin_name) logger = logging.getLogger() logger.addHandler(self.transmit_handler) for k in list(self.agents.keys()): self.remove_agent(k)
def set_connection(self, target): if self.transmit_handler != None: self.cancel_connection() self.transmit_handler = TransmitHandler(target) logger = logging.getLogger() logger.addHandler(self.transmit_handler) for k in self.slaves.keys(): self.remove_slave(k)
def set_connection(self, target): if self.transmit_handler != None: self.cancel_connection() self.transmit_handler = TransmitHandler(target) self.transmit_handler.set_origin_name(self._origin_name) logger = logging.getLogger() logger.addHandler(self.transmit_handler) for k in self.slaves.keys(): self.remove_slave(k)
class LoggingCtl: log_folder = "" display_handler = None export_handler = None recipe_handlers = (None, None) recipe_log_path = "" agents = {} transmit_handler = None _id_seq = 0 log_list = {} def __init__(self, debug=False, log_dir=None, log_subdir="", colours=True): #clear any previously set handlers logger = logging.getLogger('') for i in list(logger.handlers): logger.removeHandler(i) for key, logger in list(logging.Logger.manager.loggerDict.items()): if type(logger) != type(logging.Logger): continue for i in list(logger.handlers): logger.removeHandler(i) self._origin_name = None if log_dir != None: self.log_folder = os.path.abspath(os.path.join( log_dir, log_subdir)) else: self.log_folder = os.path.abspath( os.path.join(os.path.dirname(sys.argv[0]), './Logs', log_subdir)) if not os.path.isdir(self.log_folder): self._clean_folder(self.log_folder) #the display_handler will display logs in the terminal self.display_handler = logging.StreamHandler(sys.stdout) self.display_handler.setFormatter(MultilineFormatter(colours)) # the export_handler will add log messages to lists, so it could be exported to .lrc file self.log_list["controller"] = [] self.export_handler = self._create_export_handler( self.log_list["controller"], colours) self.export_handler.setLevel(logging.DEBUG) if not debug: self.display_handler.setLevel(logging.INFO) else: if debug == 1: self.display_handler.setLevel(logging.DEBUG) else: self.display_handler.setLevel(logging.NOTSET) logger = logging.getLogger() logger.setLevel(logging.NOTSET) logger.addHandler(self.display_handler) logger.addHandler(self.export_handler) def unset_formatter(self): self.display_handler.setFormatter(None) self.export_handler.setFormatter(None) def _gen_index(self, increment=True): if increment: self._id_seq += 1 return "%02d" % self._id_seq def set_recipe(self, recipe_path, clean=True, prepend=False, expand=""): recipe_name = os.path.splitext(os.path.split(recipe_path)[1])[0] if expand != "": recipe_name += "_" + expand if prepend: if expand == "match_1": recipe_name = self._gen_index() + "_" + recipe_name else: recipe_name = self._gen_index( increment=False) + "_" + recipe_name self.recipe_log_path = os.path.join(self.log_folder, recipe_name) if clean: self._clean_folder(self.recipe_log_path) (recipe_info, recipe_debug) = self._create_file_handler(self.recipe_log_path) logger = logging.getLogger() #remove handlers of the previous recipe logger.removeHandler(self.recipe_handlers[0]) logger.removeHandler(self.recipe_handlers[1]) self.recipe_handlers = (recipe_info, recipe_debug) logger.addHandler(recipe_info) logger.addHandler(recipe_debug) def unset_recipe(self): logger = logging.getLogger() logger.removeHandler(self.recipe_handlers[0]) logger.removeHandler(self.recipe_handlers[1]) self.recipe_handlers = (None, None) def add_agent(self, agent_id): agent_log_path = os.path.join(self.recipe_log_path, agent_id) self._clean_folder(agent_log_path) logger = logging.getLogger(agent_id) logger.setLevel(logging.DEBUG) logger.propagate = True (agent_info, agent_debug) = self._create_file_handler(agent_log_path) logger.addHandler(agent_info) logger.addHandler(agent_debug) self.log_list[agent_id] = [] export_handler = self._create_export_handler(self.log_list[agent_id]) logger.addHandler(export_handler) self.agents[agent_id] = (agent_info, agent_debug, export_handler) def remove_agent(self, agent_id): logger = logging.getLogger(agent_id) logger.propagate = False logger.removeHandler(self.agents[agent_id][0]) logger.removeHandler(self.agents[agent_id][1]) logger.removeHandler(self.agents[agent_id][2]) del self.agents[agent_id] def add_client_log(self, agent_id, log_record): logger = logging.getLogger(agent_id) log_record['address'] = agent_id record = logging.makeLogRecord(log_record) logger.handle(record) def set_connection(self, target): if self.transmit_handler != None: self.cancel_connection() self.transmit_handler = TransmitHandler(target) self.transmit_handler.set_origin_name(self._origin_name) logger = logging.getLogger() logger.addHandler(self.transmit_handler) for k in list(self.agents.keys()): self.remove_agent(k) def cancel_connection(self): if self.transmit_handler != None: logger = logging.getLogger() logger.removeHandler(self.transmit_handler) del self.transmit_handler def disable_logging(self): self.cancel_connection() for s in list(self.agents.keys()): self.remove_agent(s) self.unset_recipe() logger = logging.getLogger() logger.removeHandler(self.display_handler) logger.removeHandler(self.export_handler) self.display_handler = None self.export_handler = None def _clean_folder(self, path): try: shutil.rmtree(path) except OSError as e: if e.errno != 2: raise os.makedirs(path) def _create_file_handler(self, folder_path): file_debug = logging.FileHandler(os.path.join(folder_path, 'debug')) file_debug.setFormatter(MultilineFormatter()) file_debug.setLevel(logging.DEBUG) file_info = logging.FileHandler(os.path.join(folder_path, 'info')) file_info.setFormatter(MultilineFormatter()) file_info.setLevel(logging.INFO) return (file_debug, file_info) def _create_export_handler(self, target: list, colours: bool = False): export_handler = ExportHandler(target) export_handler.setFormatter(MultilineFormatter(colours)) return export_handler def get_recipe_log_path(self): return self.recipe_log_path def get_recipe_log_list(self): return self.log_list def set_origin_name(self, name): self._origin_name = name if self.transmit_handler != None: self.transmit_handler.set_origin_name(name) def print_log_dir(self): logging.info("Logs are stored in '%s'" % self.log_folder)
class LoggingCtl: log_folder = "" display_handler = None recipe_handlers = (None, None) recipe_log_path = "" slaves = {} transmit_handler = None def __init__(self, debug=False, log_dir=None, log_subdir="", colours=True): #clear any previously set handlers logger = logging.getLogger('') for i in list(logger.handlers): logger.removeHandler(i) for key, logger in logging.Logger.manager.loggerDict.iteritems(): if type(logger) != type(logging.Logger): continue for i in list(logger.handlers): logger.removeHandler(i) self._origin_name = None if log_dir != None: self.log_folder = os.path.abspath(os.path.join( log_dir, log_subdir)) else: self.log_folder = os.path.abspath( os.path.join(os.path.dirname(sys.argv[0]), './Logs', log_subdir)) if not os.path.isdir(self.log_folder): self._clean_folder(self.log_folder) #the display_handler will display logs in the terminal self.display_handler = logging.StreamHandler(sys.stdout) self.display_handler.setFormatter(MultilineFormatter(colours)) if not debug: self.display_handler.setLevel(logging.INFO) else: if debug == 1: self.display_handler.setLevel(logging.DEBUG) else: self.display_handler.setLevel(logging.NOTSET) logger = logging.getLogger() logger.setLevel(logging.NOTSET) logger.addHandler(self.display_handler) def set_recipe(self, recipe_path, clean=True, expand=""): recipe_name = os.path.splitext(os.path.split(recipe_path)[1])[0] if expand != "": recipe_name += "_" + expand self.recipe_log_path = os.path.join(self.log_folder, recipe_name) if clean: self._clean_folder(self.recipe_log_path) (recipe_info, recipe_debug) = self._create_file_handler(self.recipe_log_path) logger = logging.getLogger() #remove handlers of the previous recipe logger.removeHandler(self.recipe_handlers[0]) logger.removeHandler(self.recipe_handlers[1]) self.recipe_handlers = (recipe_info, recipe_debug) logger.addHandler(recipe_info) logger.addHandler(recipe_debug) def unset_recipe(self): logger = logging.getLogger() logger.removeHandler(self.recipe_handlers[0]) logger.removeHandler(self.recipe_handlers[1]) self.recipe_handlers = (None, None) def add_slave(self, slave_id): slave_log_path = os.path.join(self.recipe_log_path, slave_id) self._clean_folder(slave_log_path) logger = logging.getLogger(slave_id) logger.setLevel(logging.DEBUG) logger.propagate = True (slave_info, slave_debug) = self._create_file_handler(slave_log_path) logger.addHandler(slave_info) logger.addHandler(slave_debug) self.slaves[slave_id] = (slave_info, slave_debug) def remove_slave(self, slave_id): logger = logging.getLogger(slave_id) logger.propagate = False logger.removeHandler(self.slaves[slave_id][0]) logger.removeHandler(self.slaves[slave_id][1]) del self.slaves[slave_id] def add_client_log(self, slave_id, log_record): logger = logging.getLogger(slave_id) log_record['address'] = slave_id record = logging.makeLogRecord(log_record) logger.handle(record) def set_connection(self, target): if self.transmit_handler != None: self.cancel_connection() self.transmit_handler = TransmitHandler(target) self.transmit_handler.set_origin_name(self._origin_name) logger = logging.getLogger() logger.addHandler(self.transmit_handler) for k in self.slaves.keys(): self.remove_slave(k) def cancel_connection(self): if self.transmit_handler != None: logger = logging.getLogger() logger.removeHandler(self.transmit_handler) del self.transmit_handler def disable_logging(self): self.cancel_connection() for s in self.slaves.keys(): self.remove_slave(s) self.unset_recipe() logger = logging.getLogger() logger.removeHandler(self.display_handler) self.display_handler = None def _clean_folder(self, path): try: shutil.rmtree(path) except OSError as e: if e.errno != 2: raise os.makedirs(path) def _create_file_handler(self, folder_path): file_debug = logging.FileHandler(os.path.join(folder_path, 'debug')) file_debug.setFormatter(MultilineFormatter()) file_debug.setLevel(logging.DEBUG) file_info = logging.FileHandler(os.path.join(folder_path, 'info')) file_info.setFormatter(MultilineFormatter()) file_info.setLevel(logging.INFO) return (file_debug, file_info) def get_recipe_log_path(self): return self.recipe_log_path def set_origin_name(self, name): self._origin_name = name if self.transmit_handler != None: self.transmit_handler.set_origin_name(name) def print_log_dir(self): logging.info("Logs are stored in '%s'" % self.log_folder)
class LoggingCtl: log_folder = "" display_handler = None recipe_handlers = (None,None) recipe_log_path = "" slaves = {} transmit_handler = None def __init__(self, debug=False, log_dir=None, log_subdir="", colours=True): #clear any previously set handlers logger = logging.getLogger('') for i in list(logger.handlers): logger.removeHandler(i) for key, logger in logging.Logger.manager.loggerDict.iteritems(): if type(logger) != type(logging.Logger): continue for i in list(logger.handlers): logger.removeHandler(i) self._origin_name = None if log_dir != None: self.log_folder = os.path.abspath(os.path.join(log_dir, log_subdir)) else: self.log_folder = os.path.abspath(os.path.join( os.path.dirname(sys.argv[0]), './Logs', log_subdir)) if not os.path.isdir(self.log_folder): self._clean_folder(self.log_folder) #the display_handler will display logs in the terminal self.display_handler = logging.StreamHandler(sys.stdout) self.display_handler.setFormatter(MultilineFormatter(colours)) if not debug: self.display_handler.setLevel(logging.INFO) else: if debug == 1: self.display_handler.setLevel(logging.DEBUG) else: self.display_handler.setLevel(logging.NOTSET) logger = logging.getLogger() logger.setLevel(logging.NOTSET) logger.addHandler(self.display_handler) def set_recipe(self, recipe_path, clean=True, expand=""): recipe_name = os.path.splitext(os.path.split(recipe_path)[1])[0] if expand != "": recipe_name += "_" + expand self.recipe_log_path = os.path.join(self.log_folder, recipe_name) if clean: self._clean_folder(self.recipe_log_path) (recipe_info, recipe_debug) = self._create_file_handler( self.recipe_log_path) logger = logging.getLogger() #remove handlers of the previous recipe logger.removeHandler(self.recipe_handlers[0]) logger.removeHandler(self.recipe_handlers[1]) self.recipe_handlers = (recipe_info, recipe_debug) logger.addHandler(recipe_info) logger.addHandler(recipe_debug) def unset_recipe(self): logger = logging.getLogger() logger.removeHandler(self.recipe_handlers[0]) logger.removeHandler(self.recipe_handlers[1]) self.recipe_handlers = (None, None) def add_slave(self, slave_id): slave_log_path = os.path.join(self.recipe_log_path, slave_id) self._clean_folder(slave_log_path) logger = logging.getLogger(slave_id) logger.setLevel(logging.DEBUG) logger.propagate = True (slave_info, slave_debug) = self._create_file_handler(slave_log_path) logger.addHandler(slave_info) logger.addHandler(slave_debug) self.slaves[slave_id] = (slave_info, slave_debug) def remove_slave(self, slave_id): logger = logging.getLogger(slave_id) logger.propagate = False logger.removeHandler(self.slaves[slave_id][0]) logger.removeHandler(self.slaves[slave_id][1]) del self.slaves[slave_id] def add_client_log(self, slave_id, log_record): logger = logging.getLogger(slave_id) log_record['address'] = slave_id record = logging.makeLogRecord(log_record) logger.handle(record) def set_connection(self, target): if self.transmit_handler != None: self.cancel_connection() self.transmit_handler = TransmitHandler(target) self.transmit_handler.set_origin_name(self._origin_name) logger = logging.getLogger() logger.addHandler(self.transmit_handler) for k in self.slaves.keys(): self.remove_slave(k) def cancel_connection(self): if self.transmit_handler != None: logger = logging.getLogger() logger.removeHandler(self.transmit_handler) del self.transmit_handler def disable_logging(self): self.cancel_connection() for s in self.slaves.keys(): self.remove_slave(s) self.unset_recipe() logger = logging.getLogger() logger.removeHandler(self.display_handler) self.display_handler = None def _clean_folder(self, path): try: shutil.rmtree(path) except OSError as e: if e.errno != 2: raise os.makedirs(path) def _create_file_handler(self, folder_path): file_debug = logging.FileHandler(os.path.join(folder_path, 'debug')) file_debug.setFormatter(MultilineFormatter()) file_debug.setLevel(logging.DEBUG) file_info = logging.FileHandler(os.path.join(folder_path, 'info')) file_info.setFormatter(MultilineFormatter()) file_info.setLevel(logging.INFO) return (file_debug, file_info) def get_recipe_log_path(self): return self.recipe_log_path def set_origin_name(self, name): self._origin_name = name if self.transmit_handler != None: self.transmit_handler.set_origin_name(name)