def log2exception(code, sys_exc_info, message=None, die=False): """Log trace message to file and STDOUT, but don't die. Args: code: Message code sys_exc_info: Tuple from exception from sys.exc_info die: Die if True Returns: None """ # Initialize key variables (exc_type, exc_value, exc_traceback) = sys_exc_info log_message = ('''\ Bug: Exception Type:{}, Exception Instance: {}, Stack Trace Object: {}]\ '''.format(exc_type, exc_value, exc_traceback)) log2warning(code, log_message) if bool(message) is True: log2warning(code, message) # Write trace to log file from pattoo_shared.configuration import Config config = Config() log_file = config.log_file() with open(log_file, 'a+') as _fh: traceback.print_tb(exc_traceback, file=_fh) # Die if bool(die) is True: log2die(code, log_message)
def __init__(self): """Initialize the class.""" # Pattoo libraries from pattoo_shared.configuration import Config # Define key variables app_name = 'pattoo' levels = { 'debug': logging.DEBUG, 'info': logging.INFO, 'warning': logging.WARNING, 'error': logging.ERROR, 'critical': logging.CRITICAL } # Get the logging directory config = Config() log_file = config.log_file() config_log_level = config.log_level() # Set logging level if config_log_level in levels: log_level = levels[config_log_level] else: log_level = levels['debug'] # create logger with app_name self.logger_file = logging.getLogger('{}_file'.format(app_name)) self.logger_stdout = logging.getLogger('{}_console'.format(app_name)) # Set logging levels to file and stdout self.logger_stdout.setLevel(log_level) self.logger_file.setLevel(log_level) # create file handler which logs even debug messages file_handler = logging.FileHandler(log_file) file_handler.setLevel(log_level) # create console handler with a higher log level stdout_handler = logging.StreamHandler() stdout_handler.setLevel(log_level) # create formatter and add it to the handlers formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s') file_handler.setFormatter(formatter) stdout_handler.setFormatter(formatter) # add the handlers to the logger self.logger_file.addHandler(file_handler) self.logger_stdout.addHandler(stdout_handler)