def email_handler_level(self, level=logging.WARNING): """Setter: Logging level for email notifications.""" # find all email handlers (there should be only one) eh = [ x for x in root_logger.handlers if type(x) == logging.handlers.SMTPHandler ] if len(eh) == 0: logger.warning("No email handler could be found.") else: eh[0].setLevel(level) # update conf file CONF.set("CustomXepr", "email_handler_level", level)
def notify_address(self, email_list): """Setter: Address list for email notifications.""" # find all email handlers (there should be only one) eh = [ x for x in root_logger.handlers if type(x) == logging.handlers.SMTPHandler ] if len(eh) == 0: logging.warning("No email handler could be found.") elif len(eh) > 0: for handler in eh: handler.toaddrs = email_list email_list_str = ", ".join(email_list) logger.info("Email notifications will be sent to " + email_list_str + ".") # update conf file CONF.set("CustomXepr", "notify_address", email_list)
def _setup_root_logger(): root_logger.setLevel(logging.DEBUG) root_logger.handlers.clear() # define standard format of logging messages f = logging.Formatter( fmt="%(asctime)s %(name)s %(levelname)s: " + "%(message)s", datefmt="%H:%M" ) # create and add email handler email_handler = logging.handlers.SMTPHandler( mailhost=(CONF.get("SMTP", "mailhost"), CONF.get("SMTP", "port")), fromaddr=CONF.get("SMTP", "fromaddr"), toaddrs=CONF.get("CustomXepr", "notify_address"), subject="CustomXepr logger", credentials=CONF.get("SMTP", "credentials"), secure=CONF.get("SMTP", "secure"), ) email_handler.setFormatter(f) email_handler.setLevel(CONF.get("CustomXepr", "email_handler_level")) root_logger.addHandler(email_handler) # add file handler home_path = os.path.expanduser("~") logging_path = os.path.join(home_path, ".CustomXepr", "LOG_FILES") if not os.path.exists(logging_path): os.makedirs(logging_path) log_file = os.path.join( logging_path, "root_logger " + time.strftime("%Y-%m-%d_%H-%M-%S") + ".txt", ) file_handler = logging.FileHandler(log_file) file_handler.setFormatter(f) file_handler.setLevel(logging.INFO) root_logger.addHandler(file_handler) # delete old log files now = time.time() days_to_keep = 365 for f in os.listdir(logging_path): f = os.path.join(logging_path, f) if os.stat(f).st_mtime < now - days_to_keep * 24 * 60 * 60: if os.path.isfile(f): os.remove(f)
def _setup_root_logger(): # Set up new STATUS level root_logger = logging.getLogger() logging.STATUS = 15 logging.addLevelName(logging.STATUS, "STATUS") for l in [logger, root_logger]: l.setLevel(logging.STATUS) setattr( l, "status", lambda message, *args: logger._log(logging.STATUS, message, args), ) # find all email handlers eh = [ x for x in root_logger.handlers if type(x) == logging.handlers.SMTPHandler ] # find all file handlers fh = [ x for x in root_logger.handlers if type(x) == logging.FileHandler ] # find all stream handlers sh = [ x for x in root_logger.handlers if type(x) == logging.StreamHandler ] # define standard format of logging messages f = logging.Formatter(fmt="%(asctime)s %(name)s %(levelname)s: " + "%(message)s", datefmt="%H:%M") # remove stream handlers for handler in sh: root_logger.handlers.remove(handler) # add email handler if not present if len(eh) == 0: # create and add email handler email_handler = logging.handlers.SMTPHandler( mailhost=(CONF.get("SMTP", "mailhost"), CONF.get("SMTP", "port")), fromaddr=CONF.get("SMTP", "fromaddr"), toaddrs=CONF.get("CustomXepr", "notify_address"), subject="CustomXepr logger", credentials=CONF.get("SMTP", "credentials"), secure=CONF.get("SMTP", "secure"), ) email_handler.setFormatter(f) email_handler.setLevel( CONF.get("CustomXepr", "email_handler_level")) root_logger.addHandler(email_handler) # add file handler if not present home_path = os.path.expanduser("~") logging_path = os.path.join(home_path, ".CustomXepr", "LOG_FILES") if len(fh) == 0: if not os.path.exists(logging_path): os.makedirs(logging_path) log_file = os.path.join( logging_path, "root_logger " + time.strftime("%Y-%m-%d_%H-%M-%S") + ".txt", ) file_handler = logging.FileHandler(log_file) file_handler.setFormatter(f) file_handler.setLevel(logging.INFO) root_logger.addHandler(file_handler) # delete old log files now = time.time() days_to_keep = 365 for f in os.listdir(logging_path): f = os.path.join(logging_path, f) if os.stat(f).st_mtime < now - days_to_keep * 24 * 60 * 60: if os.path.isfile(f): os.remove(f)
def notify_address(self): """ List of addresses for email notifications.""" return CONF.get("CustomXepr", "notify_address")