Source code for vision_unlearning.utils.logger

import logging
import sys
from typing import List


FORMATTER = logging.Formatter(
    fmt="[%(asctime)s] %(name)-8s %(levelname)-8s %(message)s",
    datefmt="%Y-%m-%d %H:%M:%S %z",
)


[docs] def get_logger(name: str, level=logging.INFO) -> logging.Logger: logger = logging.getLogger('vision_unlearning.' + name) # log to sys.stdout for backward compatibility. # TODO: May need to be removed in the future, after local/blob file stream are fully supported. stdout_handler = logging.StreamHandler(sys.stdout) stdout_handler.setFormatter(FORMATTER) logger.addHandler(stdout_handler) logger.setLevel(level) return logger
[docs] def setup_loggers( root_level: int = logging.WARNING, modules_debug: List[str] = [], modules_info: List[str] = ['vision_unlearning'], modules_warning: List[str] = [], modules_error: List[str] = [], ) -> None: ''' Module names are matched with "contains" for example: `azure.` will match all azure modules All non-specified modules go to WARNING --- You should called it in the main file of your application, after all imports caveat: imports done after this call will not be affected ''' logging.root.setLevel(root_level) loggers = [logging.getLogger(name) for name in logging.root.manager.loggerDict] for logger in loggers: if any([m in logger.name for m in modules_debug]): logger.setLevel(logging.DEBUG) elif any([m in logger.name for m in modules_info]): logger.setLevel(logging.INFO) elif any([m in logger.name for m in modules_warning]): logger.setLevel(logging.WARNING) elif any([m in logger.name for m in modules_error]): logger.setLevel(logging.ERROR) else: logger.setLevel(logging.WARNING)