Source code for higgs_dna.utils.logger_utils

import logging
from rich.logging import RichHandler
from rich.console import Console
from typing import Optional

LOGGER_NAME = "higgs_dna"


[docs]def setup_logger( level: str = "INFO", logfile: Optional[str] = None, time: Optional[bool] = False ) -> logging.Logger: """Setup a logger that uses RichHandler to write the same message both in stdout and in a log file called logfile. Level of information can be customized and dumping a logfile is optional. :param level: level of information :type level: str, optional :param logfile: file where information are stored :type logfile: str """ logger = logging.getLogger( LOGGER_NAME ) # need to give it a name, otherwise *way* too much info gets printed out from e.g. numba # Set up level of information possible_levels = ["INFO", "DEBUG"] if level not in possible_levels: raise ValueError( "Passed wrong level for the logger. Allowed levels are: {}".format( ", ".join(possible_levels) ) ) logger.setLevel(getattr(logging, level)) formatter = logging.Formatter("%(message)s") if time: formatter = logging.Formatter("%(asctime)s %(message)s") # Set up stream handler (for stdout) stream_handler = RichHandler(show_time=False, rich_tracebacks=True) stream_handler.setFormatter(formatter) logger.addHandler(stream_handler) # Set up file handler (for logfile) if logfile: file_handler = RichHandler( show_time=False, rich_tracebacks=True, console=Console(file=open(logfile, "wt")), ) file_handler.setFormatter(formatter) logger.addHandler(file_handler) return logger