|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| import logging
|
| from typing import Optional
|
|
|
|
|
| class WarningFilter(logging.Filter):
|
| def filter(self, record):
|
|
|
| if "simtk.openmm" in record.getMessage():
|
| return False
|
| return True
|
|
|
|
|
| def get_logger(
|
| name: str = "", loglevel: str = "INFO", log_file_path: Optional[str] = None
|
| ) -> logging.Logger:
|
| """
|
| Get a logger with the specified name and add handlers to the root logger.
|
|
|
| Args:
|
| name (str): The name of the logger. Defaults to an empty string.
|
| loglevel (str): The logging level. Defaults to "INFO".
|
| log_file_path (Optional[str]): The path to the log file. Defaults to None.
|
|
|
| Returns:
|
| logging.Logger: The configured logger.
|
| """
|
| root_logger = logging.getLogger()
|
| logger = logging.getLogger(name)
|
|
|
| add_handlers(root_logger, loglevel, log_file_path)
|
| return logger
|
|
|
|
|
| def add_handlers(
|
| logger: logging.Logger, loglevel: str, log_file_path: Optional[str] = None
|
| ) -> logging.Logger:
|
| """
|
| Add handlers to the specified logger.
|
|
|
| Args:
|
| logger (logging.Logger): The logger to which handlers will be added.
|
| loglevel (str): The logging level.
|
| log_file_path (Optional[str]): The path to the log file. Defaults to None.
|
|
|
| Returns:
|
| logging.Logger: The logger with added handlers.
|
| """
|
| fmt = "%(asctime)-15s [%(pathname)s:%(lineno)d] %(levelname)s %(name)s: %(message)s"
|
| formatter = logging.Formatter(fmt)
|
| loglevel = getattr(logging, loglevel.upper(), logging.INFO)
|
| logger.setLevel(loglevel)
|
|
|
| if not logger.handlers:
|
| handler = logging.StreamHandler()
|
| logger.addHandler(handler)
|
| else:
|
| handler = logger.handlers[0]
|
| handler.setFormatter(formatter)
|
| warning_filter = WarningFilter()
|
| handler.addFilter(warning_filter)
|
|
|
|
|
| if log_file_path is not None and len(logger.handlers) == 1:
|
| handler = logging.FileHandler(log_file_path, mode="a")
|
| handler.setLevel(logging.INFO)
|
| handler.setFormatter(formatter)
|
| logger.addHandler(handler)
|
| handler.addFilter(warning_filter)
|
|
|
| return logger
|
|
|