Source code for pyacs.verbose

[docs] def verbose(level='INFO', print_message=True, log_dir=None): """Set pyacs verbose level and optionally configure file logging. Parameters ---------- level : str, optional Verbose level: 'DEBUG', 'INFO', 'VERBOSE', 'WARNING', 'ERROR', or 'SILENT'. Default 'INFO'. print_message : bool, optional If True, print a message when the level changes. Default True. log_dir : str, optional Directory for log files. If None, file logging is not configured. Returns ------- None """ import logging import os import pyacs.message.message as MESSAGE import pyacs.message.verbose_message as VERBOSE import pyacs.message.error as ERROR import pyacs.message.warning as WARNING import pyacs.message.debug_message as DEBUG logging_levels={50:'CRITICAL',40:'ERROR',30:'WARNING',20:'INFO',10:'DEBUG',0:'NOTSET'} current_level = logging_levels[logging.getLogger("my_logger").level] if level.upper() not in ['DEBUG','INFO','VERBOSE','WARNING','ERROR','SILENT']: WARNING("level argument not understood: %s" % level) WARNING("level must be among: %s" % ",".join(['DEBUG','INFO','VERBOSE','WARNING','ERROR','SILENT'])) MESSAGE("Setting verbose level to INFO") level='INFO' # Configure logging level if level.upper() == 'DEBUG': logging.getLogger("my_logger").setLevel(logging.DEBUG) if level.upper() == 'INFO': logging.getLogger("my_logger").setLevel(logging.INFO) if level.upper() == 'VERBOSE': logging.getLogger("my_logger").setLevel(logging.INFO) if level.upper() == 'ERROR': logging.getLogger("my_logger").setLevel(logging.ERROR) if level.upper() == 'SILENT': logging.getLogger("my_logger").setLevel(logging.ERROR) # Configure file logging if log_dir is provided if log_dir is not None: # Create log directory if it doesn't exist os.makedirs(log_dir, exist_ok=True) # Get the main pyacs logger logger = logging.getLogger('pyacs') # Remove existing file handlers to avoid duplicates for handler in logger.handlers[:]: if isinstance(handler, logging.FileHandler): handler.close() logger.removeHandler(handler) # Create log file path log_file = os.path.join(log_dir, "pyacs.log") # Configure file handler file_handler = logging.FileHandler(log_file, mode='a') # append mode file_handler.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') file_handler.setFormatter(formatter) logger.addHandler(file_handler) # Set logger level to ensure messages are passed through logger.setLevel(logging.INFO) if print_message: MESSAGE("File logging enabled: %s" % log_file) if print_message: MESSAGE("Verbose level changed from %s to %s" % (current_level, level) ) return