Beispiel #1
0
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__)
Beispiel #2
0
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