Source code for ForMoSA.core.loggings
import logging
from rich.logging import RichHandler
from rich.theme import Theme
from rich.console import Console
import os
[docs]
def setup_logging(level: str ="INFO", logfile: str | os.PathLike = None, name: str = None):
'''
Setup the logging
Parameters
----------
level : str
Level of the logger ('INFO', 'DEBUG', 'WARNING', 'ERROR', 'CRITICAL')
logfile : str | os.PathLike
Path of the log
name : str
Name of the logger
Returns
-------
logger : logging.Logger
Logger
Notes
-----
Authors: Arthur Vigan and Allan Denis
'''
logger = logging.getLogger(f"ForMoSA.{name}") if name else logging.getLogger("ForMoSA")
logger.setLevel(level.upper())
logger.propagate = False
if logger.hasHandlers():
for hdlr in logger.handlers:
logger.removeHandler(hdlr)
theme = Theme({
"logging.level.debug": "dim",
"logging.level.info": "green",
"logging.level.warning": "yellow",
"logging.level.error": "red",
"logging.level.critical": "bold red",
})
console = Console(theme=theme)
handler = RichHandler(show_time=False, show_path=False, console=console)
logger.addHandler(handler)
if logfile:
fh = logging.FileHandler(logfile, mode="a")
formatter = logging.Formatter(
"%(asctime)s | %(name)s | %(levelname)s | %(message)s"
)
fh.setFormatter(formatter)
logger.addHandler(fh)
return logger