Source code for ewoksutils.cli_utils.cli_log_utils

import logging
import sys
from argparse import Namespace
from typing import List

from .cli_spec import CLIArg

LEVELS = {
    "debug": logging.DEBUG,
    "info": logging.INFO,
    "warning": logging.WARNING,
    "error": logging.ERROR,
    "critical": logging.CRITICAL,
}


[docs] def log_arguments(default_log_level: str = "warning") -> List[CLIArg]: return [ CLIArg( "log", ["-l", "--log"], help="Log level.", type=str.lower, choices=list(LEVELS), default=default_log_level, ) ]
[docs] def parse_log_arguments(cli_args: Namespace) -> None: logger = logging.getLogger() level = LEVELS[cli_args.log] logger.setLevel(level) formatter = logging.Formatter( "%(asctime)s - %(name)s - %(levelname)-8s - %(message)s" ) class StdOutFilter(logging.Filter): def filter(self, record): return record.levelno < logging.WARNING class StdErrFilter(logging.Filter): def filter(self, record): return record.levelno >= logging.WARNING if level < logging.WARNING: h = logging.StreamHandler(sys.stdout) h.addFilter(StdOutFilter()) h.setLevel(level) if formatter is not None: h.setFormatter(formatter) logger.addHandler(h) h = logging.StreamHandler(sys.stderr) h.addFilter(StdErrFilter()) h.setLevel(level) if formatter is not None: h.setFormatter(formatter) logger.addHandler(h)