[docs]definit_logger(config):""" A logger that can show a message on standard output and write it into the file named `filename` simultaneously. All the message that you want to log MUST be str. Args: config (Config): An instance object of Config, used to record parameter information. Example: >>> logger = logging.getLogger(config) >>> logger.debug(train_state) >>> logger.info(train_result) """init(autoreset=True)LOGROOT='./log/'dir_name=os.path.dirname(LOGROOT)ensure_dir(dir_name)model_name=os.path.join(dir_name,config['model'])ensure_dir(model_name)logfilename='{}/{}.log'.format(config['model'],get_local_time())logfilepath=os.path.join(LOGROOT,logfilename)filefmt="%(asctime)-15s%(levelname)s%(message)s"filedatefmt="%a%d %b %Y %H:%M:%S"fileformatter=logging.Formatter(filefmt,filedatefmt)sfmt="%(log_color)s%(asctime)-15s%(levelname)s%(message)s"sdatefmt="%d %b %H:%M"sformatter=colorlog.ColoredFormatter(sfmt,sdatefmt,log_colors=log_colors_config)ifconfig['state']isNoneorconfig['state'].lower()=='info':level=logging.INFOelifconfig['state'].lower()=='debug':level=logging.DEBUGelifconfig['state'].lower()=='error':level=logging.ERRORelifconfig['state'].lower()=='warning':level=logging.WARNINGelifconfig['state'].lower()=='critical':level=logging.CRITICALelse:level=logging.INFOfh=logging.FileHandler(logfilepath)fh.setLevel(level)fh.setFormatter(fileformatter)remove_color_filter=RemoveColorFilter()fh.addFilter(remove_color_filter)sh=logging.StreamHandler()sh.setLevel(level)sh.setFormatter(sformatter)logging.basicConfig(level=level,handlers=[sh,fh])