Beispiel #1
0
def set_rich_logger(config_logger, verbosity):
    """Will set the RichHandler of the logger.

    Parameter
    ----------
    config_logger :class:
        Config object of the logger.
    """
    theme = _parse_theme(config_logger)
    global console
    console = Console(theme=theme)
    # These keywords Are Highlighted specially.
    RichHandler.KEYWORDS = [
        "Played",
        "animations",
        "scene",
        "Reading",
        "Writing",
        "script",
        "arguments",
        "Invalid",
        "Aborting",
        "module",
        "File",
        "Rendering",
        "Rendered",
    ]
    rich_handler = RichHandler(
        console=console, show_time=config_logger.getboolean("log_timestamps"))
    global logger
    rich_handler.setLevel(verbosity)
    logger.addHandler(rich_handler)
Beispiel #2
0
def initalise_logger(
    filename,
    print_level="INFO",
    file_level="DEBUG",
):
    """
    Sets up (possibly multiprocessing aware) logging.
    :param filename: Where to save the logs to
    :param print_level: What level of logging to print to console.
    Default: 'INFO'
    :param file_level: What level of logging to print to file.
    Default: 'DEBUG'
    """
    logger = logging.getLogger()
    logger.setLevel(getattr(logging, file_level))

    formatter = logging.Formatter(
        "%(asctime)s - %(levelname)s"
        " - %(processName)s %(filename)s:%(lineno)s"
        " - %(message)s"
    )
    formatter.datefmt = "%Y-%m-%d %H:%M:%S %p"

    if filename is not None:
        fh = logging.FileHandler(filename)
        fh.setLevel(getattr(logging, file_level))
        fh.setFormatter(formatter)
        logger.addHandler(fh)

    ch = RichHandler()
    ch.setLevel(getattr(logging, print_level))
    ch.setFormatter(formatter)
    logger.addHandler(ch)
    return logger
Beispiel #3
0
def _setup_logging(
    verbosity: int,
    log_file: Optional[str] = None,
):
    default_log_format = (
        "%(asctime)s [%(levelname)s](%(name)s:%(funcName)s:%(lineno)d): %(message)s"
    )
    logger = logging.getLogger("")  # get root logger
    logger.setLevel(logging.DEBUG)
    default_formatter = logging.Formatter(fmt=default_log_format, datefmt="%X")
    if log_file:
        log_file_path = Path(log_file).resolve()
        if not log_file_path.parent.exists():
            log_file_path.parent.mkdir(parents=True, exist_ok=True)
        file_handler = logging.FileHandler(log_file)
        file_handler.setFormatter(default_formatter)
        logger.addHandler(file_handler)

    if verbosity < 0:
        logger.addHandler(logging.NullHandler())
    else:
        level = logging.WARNING
        if verbosity == 1:
            level = logging.INFO
        if verbosity >= 2:
            level = logging.DEBUG

        console_handler = RichHandler(rich_tracebacks=True,
                                      log_time_format="[%X]",
                                      console=console)
        console_handler.setLevel(level)
        console_handler.setFormatter(logging.Formatter("%(message)s"))
        logger.addHandler(console_handler)
Beispiel #4
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 #5
0
def add_log_file_handler(path: str, logger_name: Optional[str] = None) -> None:
    if os.path.isdir(path):
        raise AssertionError
    log_dir = os.path.dirname(path)
    if not (os.path.isdir(log_dir) or log_dir == ""):
        raise AssertionError
    fh = RichHandler(console=Console(file=open(path, mode="w+")), markup=True)
    fh.setLevel(logging.INFO)
    logging.getLogger(logger_name).addHandler(fh)
    logging.getLogger(logger_name).info(f"[green]Log to[/]: '{path}'")
Beispiel #6
0
def cli(
    ctx,
    config,
    log_path,
    file_log_level,
    verbose,
    debug,
    debug_filter,
    quiet,
    pynetdicom_log_level,
):
    """High level DICOM file and network operations"""
    if quiet:
        if verbose or debug:
            cli_error("Can't mix --quiet with --verbose/--debug")

    # Create Rich Console outputing to stderr for logging / progress bars
    rich_con = Console(stderr=True)

    # Setup logging
    LOG_FORMAT = "%(asctime)s %(levelname)s %(threadName)s %(name)s %(message)s"
    def_formatter = logging.Formatter(LOG_FORMAT)
    root_logger = logging.getLogger("")
    root_logger.setLevel(logging.DEBUG)
    pynetdicom_logger = logging.getLogger("pynetdicom")
    pynetdicom_logger.setLevel(getattr(logging, pynetdicom_log_level))
    stream_formatter = logging.Formatter("%(threadName)s %(name)s %(message)s")
    stream_handler = RichHandler(console=rich_con, enable_link_path=False)
    stream_handler.setFormatter(stream_formatter)
    # logging.getLogger("asyncio").setLevel(logging.DEBUG)

    if debug:
        stream_handler.setLevel(logging.DEBUG)
    elif verbose:
        stream_handler.setLevel(logging.INFO)
    elif quiet:
        stream_handler.setLevel(logging.ERROR)
    else:
        stream_handler.setLevel(logging.WARN)
    root_logger.addHandler(stream_handler)
    handlers = [stream_handler]
    if log_path is not None:
        file_handler = logging.FileHandler(log_path)
        file_handler.setFormatter(def_formatter)
        file_handler.setLevel(getattr(logging, file_log_level))
        root_logger.addHandler(file_handler)
        handlers.append(file_handler)

    if len(debug_filter) > 0:
        for filter_name in debug_filter:
            if filter_name not in debug_filters:
                cli_error("Unknown debug filter: %s" % filter_name)
            for handler in handlers:
                handler.addFilter(debug_filters[filter_name])

    # Create global param dict for subcommands to use
    ctx.obj = {}
    ctx.obj["config_path"] = config
    ctx.obj["config"] = DcmConfig(config, create_if_missing=True)
    ctx.obj["rich_con"] = rich_con
Beispiel #7
0
def getlogger(logfile_path=None):
    if logfile_path is None:
        log_folder = config().get('logging', {}).get('log_folder')
        log_file = config().get('logging', {}).get('build_log_file')
        logfile_path = os.path.join(log_folder, log_file)

    fh = logging.FileHandler(logfile_path)
    fh.setFormatter(
        logging.Formatter('[%(asctime)s] %(levelname)s %(message)s'))
    fh.setLevel(level="NOTSET")
    rh = RichHandler(show_time=False, show_level=False, show_path=False)
    rh.setLevel(level="ERROR")
    #logging.basicConfig(level="NOTSET", format='%(message)s')
    log = logging.getLogger()
    log.addHandler(fh)
    #log.addHandler(rh)
    return log
Beispiel #8
0
def make_logger(parser, verbosity):
    """Make the manim logger and the console."""
    # Throughout the codebase, use Console.print() instead of print()
    theme = parse_theme(parser)
    console = Console(theme=theme)

    # set the rich handler
    RichHandler.KEYWORDS = HIGHLIGHTED_KEYWORDS
    rich_handler = RichHandler(
        console=console, show_time=parser.getboolean("log_timestamps")
    )
    rich_handler.setLevel(verbosity)

    # finally, the logger
    logger = logging.getLogger("manim")
    logger.addHandler(rich_handler)

    return logger, console
Beispiel #9
0
def add_log_file_handler(path: str, logger_name: Optional[str] = None) -> None:
    """Adds log file handler to logger.

    By defaults, adds the handler to the root logger.

    Arguments:
        path {str} -- path to output log file

    Keyword Arguments:
        logger_name {str} -- logger name (default: {""})
    """
    assert not os.path.isdir(path)
    log_dir = os.path.dirname(path)
    assert os.path.isdir(log_dir) or log_dir == ""
    fh = RichHandler(console=Console(file=open(path, mode="w+")), markup=True)
    fh.setLevel(logging.INFO)
    logging.getLogger(logger_name).addHandler(fh)
    logging.info(f"[green]Log to[/]: '{path}'")
Beispiel #10
0
    def setup(self):

        if self.has_run_before or current_process().name != "MainProcess":
            # print("Has been setup before", current_process())
            return None
        # print("Setting up logs", current_process())

        # if running from CLI:
        if Path("pyproject.toml").is_file():
            log_dir = "./logs"

        # if running from iPython / VS Code
        elif Path("cli.py").is_file():
            log_dir = "../logs"

        else:
            log_dir = "./logs"
            # raise AssertionError(f"Could not figure out logging dir")

        Path(log_dir).mkdir(parents=True, exist_ok=True)
        filename = f"{log_dir}/log--{self.start_time}.txt"

        # Create handlers
        # stream_handler = logging.StreamHandler()
        stream_handler = RichHandler(rich_tracebacks=True, console=console)
        file_handler = logging.FileHandler(filename)

        # Configure level and formatter and add it to handlers
        stream_handler.setLevel(logging.WARNING)
        file_handler.setLevel(
            logging.DEBUG)  # error and above is logged to a file

        stream_handler.setFormatter(logging.Formatter("%(message)s"))
        file_handler.setFormatter(
            logging.Formatter(
                "%(asctime)s | %(name)s | %(levelname)s | %(message)s"))

        # Add handlers to the logger
        logger = logging.getLogger(self.name)
        logger.addHandler(stream_handler)
        logger.addHandler(file_handler)
        logger.setLevel(logging.DEBUG)

        self.has_run_before = True
Beispiel #11
0
def setup():
    """Setup logging based on the configuration in ``vaex.settings``

    This function is automatically called when importing vaex. If settings are changed, call :func:`reset` and this function again
    to re-apply the settings.
    """
    global log_handler

    if vaex.settings.main.logging.setup:
        logger.setLevel(logging.DEBUG)

        # create console handler and accept all loglevels
        if vaex.settings.main.logging.rich:
            from rich.logging import RichHandler
            log_handler = RichHandler()
        else:
            log_handler = logging.StreamHandler()

            # create formatter
            formatter = logging.Formatter('%(levelname)s:%(threadName)s:%(name)s:%(message)s')


            # add formatter to console handler
            log_handler.setFormatter(formatter)
        log_handler.setLevel(logging.DEBUG)

        # add console handler to logger
        logger.addHandler(log_handler)

    logging.getLogger("vaex").setLevel(logging.ERROR)  # default to higest level
    _set_log_level(vaex.settings.main.logging.error, logging.ERROR)
    _set_log_level(vaex.settings.main.logging.warning, logging.WARNING)
    _set_log_level(vaex.settings.main.logging.info, logging.INFO)
    _set_log_level(vaex.settings.main.logging.debug, logging.DEBUG)
    # VAEX_DEBUG behaves similar to VAEX_LOGGING_DEBUG, but has more effect
    DEBUG_MODE = os.environ.get('VAEX_DEBUG', '')
    if DEBUG_MODE:
        _set_log_level(DEBUG_MODE, logging.DEBUG)
Beispiel #12
0
def logger(name: str) -> Logger:
    _log = getLogger(name)

    _log.console = Console(theme=theme)
    _hndl_console = RichHandler(markup=True,
                                show_time=False,
                                show_level=False,
                                show_path=False,
                                rich_tracebacks=True,
                                tracebacks_show_locals=True,
                                console=_log.console)
    if cfg.console.has('format'):
        _hndl_console.setFormatter(Formatter(cfg.console.format))
    if cfg.console.has('level'):
        _hndl_console.setLevel(cfg.console.level)
    _log.addHandler(_hndl_console)

    _hndl_file = TimedRotatingFileHandler(
        filename=f'{cfg.file.path}/{name}.log',
        when=cfg.file.when,
        interval=cfg.file.interval)
    if cfg.file.has('format'):
        _hndl_file.setFormatter(NoStyleFormatter(cfg.file.format))
    if cfg.file.has('level'):
        _hndl_file.setLevel(cfg.file.level)
    _log.addHandler(_hndl_file)

    _hndl_net = SocketHandler(host=cfg.net.get('host', 'localhost'),
                              port=cfg.net.get('port', 8765))
    if cfg.net.has('format'):
        _hndl_net.setFormatter(NoStyleFormatter(cfg.net.format))
    if cfg.net.has('level'):
        _hndl_net.setLevel(cfg.net.level)
    _log.addHandler(_hndl_net)

    _log.setLevel(cfg.logger.get(name, cfg.logger.__default__))

    def __response(r,
                   ok,
                   error,
                   force={
                       'ok': False,
                       'error': False,
                       'exit': True
                   }):
        _stdout = r.stdout.strip()
        _stderr = r.stderr.strip()
        if r.ok:
            if _stderr and not force.get('ok', False):
                for l in _stderr.splitlines():
                    _log.warning(l)
            elif _stdout and not force.get('ok', False):
                for l in _stdout.splitlines():
                    _log.info(l)
            else:
                _log.info(ok)
        else:
            if _stderr and not force.get('error', False):
                for l in _stderr.strip().splitlines():
                    _log.error(l)
            elif _stdout and not force.get('error', False):
                for l in _stdout.strip().splitlines():
                    _log.error(l)
            else:
                _log.error(error)
            _log.warning(
                f':{icon.exit}: [warn]Exit[/warn] :{icon.code}: code: [hl]{r.exited}[/hl]'
            )
        if force.get('exit', True):
            exit(r.exited)
        else:
            return r.exited

    _log.response = __response

    return _log
Beispiel #13
0
import logging
from rich.logging import RichHandler

# set up logging to file
logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
    datefmt='%d-%m-%Y %H:%M',
    filename='cov19tdm.log',
    filemode='w')

# Define a handler which writes INFO messages or higher
console = RichHandler()
console.setLevel(logging.INFO)

# Set a format which is simpler for console use
formatter = logging.Formatter(
    '[%(asctime)s] %(name)-12s: %(levelname)-6s: %(message)s',
    datefmt='%H:%M',
)

# Tell the handler to use this format
console.setFormatter(formatter)

# Add the handler to the root logger
logging.getLogger('').addHandler(console)

# Disable messages from external libraries lower the warnings
logging.getLogger("matplotlib").setLevel(logging.WARNING)
Beispiel #14
0
# create logger instance
logger = logging.getLogger(__name__)

# create dt for logging
dt = datetime.strftime(datetime.now(), "%Y%m%d-%H-%M-%S")

# handlers
shell_handler = RichHandler()
path = os.path.abspath(os.path.dirname(__file__))
file_handler = logging.FileHandler(f"{path}/logs/{dt}.log")

# formatters
shell_formatter = logging.Formatter('%(message)s')
file_formatter = logging.Formatter(
    '%(levelname)s %(asctime)s [%(filename)s:%(funcName)s:%(lineno)d] %(message)s'
)

# set formatters
shell_handler.setFormatter(shell_formatter)
file_handler.setFormatter(file_formatter)

# set levels
logger.setLevel(logging.DEBUG)
shell_handler.setLevel(logging.DEBUG)
file_handler.setLevel(logging.DEBUG)

# add handlers to logger
logger.addHandler(shell_handler)
logger.addHandler(file_handler)
Beispiel #15
0
from rich.logging import RichHandler
from typing import Callable
from functools import wraps

# logging paths
LOGS_DIR = Path(__file__).parent.parent / "data/logs"
LOGS_DIR.mkdir(parents=True, exist_ok=True)

# setting for stdout and file logging
logger = logging.getLogger(__name__)
stdout_handler = RichHandler()
file_handler = logging.FileHandler(f"{LOGS_DIR}/debug.log")

# logging levels
logger.setLevel(logging.DEBUG)
stdout_handler.setLevel(logging.INFO)
file_handler.setLevel(logging.DEBUG)

# the formatters look
fmt_stdout = "%(message)s"
fmt_file = (
    "[%(levelname)s] %(asctime)s | %(filename)s:%(funcName)s:%(lineno)d | %(message)s"
)

stdout_formatter = logging.Formatter(fmt_stdout)
file_formatter = logging.Formatter(fmt_file)

# set formatters
stdout_handler.setFormatter(stdout_formatter)
file_handler.setFormatter(file_formatter)
Beispiel #16
0
from rich.traceback import install

# global console and log object
console = Console()
log = logging.getLogger(__name__)
install()

# handler for logging in stdout and file
shellLogHandler = RichHandler()
log_file = open("/tmp/mate_debug.log", "a")
fileLogHandler = RichHandler(console=Console(file=log_file),
                             rich_tracebacks=True,
                             tracebacks_show_locals=True)

log.setLevel(logging.DEBUG)
shellLogHandler.setLevel(logging.INFO)
fileLogHandler.setLevel(logging.DEBUG)

# the formatter determines what our logs will look like
fmt_shell = "<%(funcName)s> %(message)s"
fmt_file = fmt_shell

shell_formatter = logging.Formatter(fmt_shell)
file_formatter = logging.Formatter(fmt_file)

# here we hook everything together
shellLogHandler.setFormatter(shell_formatter)
fileLogHandler.setFormatter(file_formatter)

log.addHandler(shellLogHandler)
log.addHandler(fileLogHandler)
Beispiel #17
0
# init log file
log_folder = "./logs"
check(log_folder)

log_file = os.path.join(log_folder, datetime.now().strftime("%Y%m%d_T%H%M%S.log"))
clear(log_file)

# init loggers
logger = logging.getLogger(__name__)
shell_handler = RichHandler()
file_handler = logging.FileHandler(log_file)

# set logging levels
logger.setLevel(logging.DEBUG)
shell_handler.setLevel(logging.INFO)
file_handler.setLevel(logging.DEBUG)

# set formats and formatters
fmt_shell = "%(message)s"
fmt_file = "%(levelname)s %(asctime)s [%(threadName)s] [%(filename)s:%(funcName)s:%(lineno)d] %(message)s"

shell_formatter = logging.Formatter(fmt_shell)
file_formatter = logging.Formatter(fmt_file)

shell_handler.setFormatter(shell_formatter)
file_handler.setFormatter(file_formatter)

# connect handlers to logger
logger.addHandler(shell_handler)
logger.addHandler(file_handler)
Beispiel #18
0
if not os.path.isfile(BotLogger.log_file):
    os.makedirs(BotLogger.base_dir, exist_ok=True)

logging.setLoggerClass(BotLogger)

logging.addLevelName(15, "VERBOSE")
logging.addLevelName(25, "SUCCESS")

# create file handler which logs even debug messages
file_handler = logging.FileHandler(BotLogger.log_file)
file_handler.setLevel(logging.DEBUG)

# create formatter and add it to the handlers
formatter = logging.Formatter('%(asctime)s - [%(levelname)s] %(message)s')
file_handler.setFormatter(formatter)

rich_handler = RichHandler(rich_tracebacks=True,
                           show_time=False,
                           markup=True,
                           show_level=False,
                           show_path=False)
rich_handler.setLevel(logging.INFO)

logging.basicConfig(
    format="%(message)s",
    handlers=[rich_handler, file_handler]
)

logger: BotLogger = logging.getLogger(BotLogger.appname)
logger.setLevel(logging.DEBUG)
Beispiel #19
0
def get_console_handler(level=logging.INFO):
    console_handler = RichHandler(console=console, markup=True)
    console_handler.setFormatter(FORMATER)
    console_handler.setLevel(level)
    return console_handler
Beispiel #20
0
    console.print("⚠️ Potential Differences detected:", style="bold yellow")

    for diff in differences:
        table.add_row(diff.name, diff.current, diff.latest)

    console.print(table)


if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        prog="poormans_dependabot", description="Sort of dependabot-like local utility"
    )
    parser.add_argument("--verbose", action="store_true", help="Show verbose log info")
    args = parser.parse_args()

    if args.verbose:
        LOG_LEVEL = logging.INFO
    else:
        LOG_LEVEL = logging.WARNING

    logger = logging.getLogger()
    logger.setLevel(LOG_LEVEL)
    ch = RichHandler()
    ch.setLevel(LOG_LEVEL)
    formatter = logging.Formatter("%(asctime)s - %(message)s")
    ch.setFormatter(formatter)
    logger.addHandler(ch)

    asyncio.run(main=main())