def configure_logging(config): """Configure the root logger based on user config.""" rootlogger = logging.getLogger() while rootlogger.handlers: rootlogger.handlers.pop() try: if config["path"]: logfile_path = os.path.expanduser(config["path"]) else: logfile_path = config["path"] except KeyError: logfile_path = DEFAULT_LOG_FILENAME if logfile_path: logdir = os.path.dirname(os.path.realpath(logfile_path)) if not os.path.isdir(logdir): os.makedirs(logdir) log_level = get_logging_level(config.get("level", "info")) rootlogger.setLevel(log_level) formatter_str = set_formatter_string(config) formatter = logging.Formatter(formatter_str) handler = None if config.get("rich") is not False: handler = RichHandler( rich_tracebacks=True, show_time=config.get("timestamp", True), show_path=config.get("extended", True), ) if logfile_path: file_handler = RotatingFileHandler( logfile_path, maxBytes=config.get("file-size", 50e6) ) file_handler.setLevel(log_level) file_handler.setFormatter(formatter) rootlogger.addHandler(file_handler) if config.get("console"): handler = logging.StreamHandler() handler.setFormatter(formatter) # If we still don't have the handler, we are assuming that # the user wants to switch off logging, let's log only # Critical errors if not handler: handler = logging.StreamHandler() handler.setFormatter(formatter) log_level = get_logging_level("critical") if config.get("filter") and handler: handler.addFilter(ParsingFilter(config, config["filter"])) if handler: handler.setLevel(log_level) rootlogger.addHandler(handler) _LOGGER.info("=" * 40) _LOGGER.info(_("Started opsdroid %s."), __version__)
def get_rich_handler() -> RichHandler: """ per handler do + set level + set formatter + add filters specific to handler """ from rich import print, emoji # -------------------------------------------------------- 01 # get handler _h = RichHandler( level=logging.NOTSET, markup=True, rich_tracebacks=True, show_path=True, locals_max_string=160, # log_time_format="[%x %X]", log_time_format="[%X]", ) # -------------------------------------------------------- 02 # set level # this is done above so commenting out # just keep these lines for reference on how initialize Handlers # _h.setLevel(level=logging.NOTSET) # -------------------------------------------------------- 03 # set formatter # _h.setFormatter(fmt=get_formatter_for_rich_handler()) # -------------------------------------------------------- 04 # add filters _h.addFilter(AddLoggingMetaFilter()) # -------------------------------------------------------- 05 # return return _h