Source code for pimmslearn.logging
"""Custom logging setup for notebooks."""
import logging
import sys
from datetime import datetime
from pathlib import Path
LOG_FOLDER = Path("logs")
LOG_FOLDER.mkdir(exist_ok=True)
[docs]
def setup_nb_logger(
level: int = logging.INFO,
format_str: str = "%(name)s - %(levelname)-8s %(message)s",
) -> None:
logging.basicConfig(level=level, format=format_str)
root_logger = logging.getLogger()
root_logger.setLevel(
level
) # in case root_logger existed already before calling basicConfig
c_format = logging.Formatter(format_str)
if root_logger.handlers:
handler = root_logger.handlers[0]
else:
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(c_format)
return root_logger
[docs]
def setup_logger_w_file(logger, level=logging.INFO, fname_base=None):
"""Setup logging in project. Takes a logger an creates
Parameters
----------
logger : logging.Logger
logger instance to configre
level : int, optional
logging level, by default logging.INFO
fname_base : str, optional
filename for logging, by default None
Returns
-------
logging.Logger
Configured logger instance for logging
Examples
--------
>>> import logging
>>> logger = logging.getLogger('pimmslearn')
>>> _ = setup_logger_w_file(logger) # no logging to file
>>> logger.handlers = [] # reset logger
>>> _ = setup_logger_w_file() #
"""
logger.setLevel(level)
logger.handlers = [] # remove any handler in case you reexecute the cell
c_format = logging.Formatter("%(name)s - %(levelname)-8s %(message)s")
c_handler = logging.StreamHandler(sys.stdout)
c_handler.setLevel(level)
c_handler.setFormatter(c_format)
logger.addHandler(c_handler)
if fname_base:
date_log_file = "{:%y%m%d_%H%M}".format(datetime.now())
f_handler = logging.FileHandler(
LOG_FOLDER / f"{fname_base}_{date_log_file}.txt"
)
f_handler.setLevel(level)
f_handler.setFormatter(c_format)
logger.addHandler(f_handler)
return logger
setup_logger = setup_logger_w_file