def get_logging_console(): return logging.StreamHandler(stream=TqdmConsole(sys.stderr))
def configure_logging( verbosity: Verbosity, progress_bar_friendly: bool = True, manage_root_logger: bool = False, ): """Set up logging. Before calling :func:`ocrmypdf.ocr()`, you can use this function to configure logging, if you want ocrmypdf's output to look like the ocrmypdf command line interface. It will register log handlers, log filters, and formatters, configure color logging to standard error, and adjust the log levels of third party libraries. Details of this are fine-tuned and subject to change. The ``verbosity`` argument is equivalent to the argument ``--verbose`` and applies those settings. If this function is not called, ocrmypdf will not configure logging, and it is up to the caller of ``ocrmypdf.ocr()`` to set up logging as it wishes using the Python standard library's logging module. If this function is called, the caller may of course make further adjustments to logging. Regardless of whether this function is called, ocrmypdf will perform all of its logging under the ``"ocrmypdf"`` logging namespace. In addition, ocrmypdf imports pdfminer, which logs under ``"pdfminer"``. A library user may wish to configure both; note that pdfminer is extremely chatty at the log level ``logging.INFO``. This function does not set up the ``debug.log`` log file that the command line interface does at certain verbosity levels. Applications should configure their own debug logging. Args: verbosity (Verbosity): Verbosity level. progress_bar_friendly (bool): Install the TqdmConsole log handler, which is compatible with the tqdm progress bar; without this log messages will overwrite the progress bar manage_root_logger (bool): Configure the process's root logger, to ensure all log output is sent through Returns: The toplevel logger for ocrmypdf (or the root logger, if we are managing it). """ prefix = '' if manage_root_logger else 'ocrmypdf' log = logging.getLogger(prefix) log.setLevel(logging.DEBUG) if progress_bar_friendly: console = logging.StreamHandler(stream=TqdmConsole(sys.stderr)) else: console = logging.StreamHandler(stream=sys.stderr) if verbosity < 0: console.setLevel(logging.ERROR) elif verbosity >= 1: console.setLevel(logging.DEBUG) else: console.setLevel(logging.INFO) console.addFilter(PageNumberFilter()) if verbosity >= 2: fmt = '%(levelname)7s %(name)s -%(pageno)s %(message)s' else: fmt = '%(pageno)s%(message)s' use_colors = progress_bar_friendly if not coloredlogs: use_colors = False if use_colors: if os.name == 'nt': use_colors = coloredlogs.enable_ansi_support() if use_colors: use_colors = coloredlogs.terminal_supports_colors() if use_colors: formatter = coloredlogs.ColoredFormatter(fmt=fmt) else: formatter = logging.Formatter(fmt=fmt) console.setFormatter(formatter) log.addHandler(console) if verbosity <= 1: pdfminer_log = logging.getLogger('pdfminer') pdfminer_log.setLevel(logging.ERROR) pil_log = logging.getLogger('PIL') pil_log.setLevel(logging.INFO) if manage_root_logger: logging.captureWarnings(True) return log
def configure_logging( verbosity: Verbosity, progress_bar_friendly: bool = True, manage_root_logger: bool = False, ): """Set up logging. Library users may wish to use this function if they want their log output to be similar to ocrmypdf command line interface. If not used, the external application should configure logging on its own. ocrmypdf will perform all of its logging under the ``"ocrmypdf"`` logging namespace. In addition, ocrmypdf imports pdfminer, which logs under ``"pdfminer"``. A library user may wish to configure both; note that pdfminer is extremely chatty at the log level ``logging.INFO``. Library users may perform additional configuration afterwards. Args: verbosity (Verbosity): Verbosity level. progress_bar_friendly (bool): Install the TqdmConsole log handler, which is compatible with the tqdm progress bar; without this log messages will overwrite the progress bar manage_root_logger (bool): Configure the process's root logger, to ensure all log output is sent through Returns: The toplevel logger for ocrmypdf (or the root logger, if we are managing it). """ prefix = '' if manage_root_logger else 'ocrmypdf' log = logging.getLogger(prefix) log.setLevel(logging.DEBUG) if progress_bar_friendly: console = logging.StreamHandler(stream=TqdmConsole(sys.stderr)) else: console = logging.StreamHandler(stream=sys.stderr) if verbosity < 0: console.setLevel(logging.ERROR) elif verbosity >= 1: console.setLevel(logging.DEBUG) else: console.setLevel(logging.INFO) console.addFilter(PageNumberFilter()) if verbosity >= 2: fmt = '%(levelname)7s %(name)s -%(pageno)s %(message)s' else: fmt = '%(pageno)s%(message)s' use_colors = progress_bar_friendly if not coloredlogs: use_colors = False if use_colors: if os.name == 'nt': use_colors = coloredlogs.enable_ansi_support() if use_colors: use_colors = coloredlogs.terminal_supports_colors() if use_colors: formatter = coloredlogs.ColoredFormatter(fmt=fmt) else: formatter = logging.Formatter(fmt=fmt) console.setFormatter(formatter) log.addHandler(console) if verbosity <= 1: pdfminer_log = logging.getLogger('pdfminer') pdfminer_log.setLevel(logging.ERROR) pil_log = logging.getLogger('PIL') pil_log.setLevel(logging.INFO) if manage_root_logger: logging.captureWarnings(True) return log