import time import pathlib import logging from pkg_resources import resource_stream from ruamel.yaml import YAML yaml = YAML() def get_default_conf(stream_args: list = None) -> dict: if stream_args is None: stream_args = ["cn2an", "config.yaml"] with resource_stream(*stream_args) as stream: return yaml.load(stream) def get_logger(name: str = "cn2an", level: str = "info") -> logging.Logger: logger = logging.getLogger(name) level_dict = { "debug": logging.DEBUG, "info": logging.INFO, "warning": logging.WARNING, "error": logging.ERROR, "critical": logging.CRITICAL } logger.setLevel(level_dict[level]) if not logger.handlers: log_path = log_path_util() fh = logging.FileHandler(log_path) fh.setLevel(logging.INFO) fh_fmt = logging.Formatter("%(asctime)-15s %(filename)s %(levelname)s %(lineno)d: %(message)s") fh.setFormatter(fh_fmt) console = logging.StreamHandler() console.setLevel(logging.DEBUG) console_fmt = logging.Formatter("%(filename)s %(levelname)s %(lineno)d: %(message)s") console.setFormatter(console_fmt) logger.addHandler(fh) logger.addHandler(console) return logger def log_path_util(name: str = "cn2an") -> str: day = time.strftime("%Y-%m-%d", time.localtime()) log_path = pathlib.Path(f"./log/{day}") if not log_path.exists(): log_path.mkdir(parents=True) return f"{str(log_path)}/{name}.log"