def get_logger(self): if self.logger: return self.logger else: log_level = self.get("general","log_level") self.logger = logging.getLogger("STARTTLS-Everywhere") try: self.logger.setLevel(log_level) except: raise ValueError("Invalid value for log_level: %s" % log_level) fmt = logging.Formatter("%(asctime)s %(levelname)s %(message)s") stderr_needed = True # file logging log_file = self.get("general","log_file","") log_file_level = self.get("general","log_file_level") if log_file != "": try: hdlr = RotatingFileHandler(log_file, maxBytes=1000000, backupCount=3) except IOError as e: if e.errno == 13: raise InsufficientPermissionError("Insufficient permissions to " "write STARTTLS-Everywhere log " "file (log_file): %s" % log_file) else: raise try: hdlr.setLevel(log_file_level) except: raise ValueError("Invalid value for log_file_level: " "%s" % log_file_level) hdlr.setFormatter(fmt) self.logger.addHandler(hdlr) stderr_needed = False # SMTP logging log_smtp_server = self.get("general","log_smtp_server","") log_smtp_from = self.get("general","log_smtp_from","") log_smtp_to = self.get("general","log_smtp_to","") log_smtp_subj = self.get("general","log_smtp_subject","") log_smtp_user = self.get("general","log_smtp_user","") log_smtp_pass = self.get("general","log_smtp_pass","") log_smtp_tls = self.get("general","log_smtp_tls","") log_smtp_tls_key = self.get("general","log_smtp_tls_key","") log_smtp_tls_cert = self.get("general","log_smtp_tls_cert","") log_smtp_level = self.get("general","log_smtp_level") if log_smtp_server != "": if len(log_smtp_server.split(":")) > 2: raise ValueError("SMTP logging config: invalid log_smtp_server " "format, should be hostname[:port]") if log_smtp_from == "": raise ValueError("SMTP logging config: missing log_smtp_from") if log_smtp_to == "": raise ValueError("SMTP logging config: missing log_smtp_to") if log_smtp_subj == "": raise ValueError("SMTP logging config: missing log_smtp_subject") log_smtp_host = log_smtp_server.split(":")[0] if len(log_smtp_server.split(":")) > 1: log_smtp_port = log_smtp_server.split(":")[1] if not log_smtp_port.isdigit(): raise ValueError("SMTP logging config: invalid log_smtp_server " "port, should be numeric: %s" % log_smtp_port.isdigit) else: log_smtp_port = 25 log_smtp_server_tuple = (log_smtp_host,log_smtp_port) log_smtp_to_list = log_smtp_to.split(";") log_smtp_usrpwd_tuple = None log_smtp_tls_tuple = None # TLS only if user/pass are given if log_smtp_user != "" and log_smtp_pass != "": log_smtp_usrpwd_tuple = (log_smtp_user,log_smtp_pass) if log_smtp_tls.lower() in [ "yes", "true", "1" ]: log_smtp_tls_tuple = () if log_smtp_tls_key != "": if log_smtp_tls_cert != "": log_smtp_tls_tuple = (log_smtp_tls_key,log_smtp_tls_cert) else: log_smtp_tls_tuple = (log_smtp_tls_key) smtp_hdlr = SMTPHandler(mailhost=log_smtp_server_tuple, fromaddr=log_smtp_from, toaddrs=log_smtp_to_list, subject=log_smtp_subj, credentials=log_smtp_usrpwd_tuple, secure=log_smtp_tls_tuple) smtp_hdlr.setFormatter(fmt) hdlr = MemoryHandler(capacity=1000000,flushLevel="CRITICAL") hdlr.setTarget(smtp_hdlr) try: hdlr.setLevel(log_smtp_level) except: raise ValueError("Invalid value for log_smtp_level: " "%s" % log_smtp_level) hdlr.setFormatter(fmt) self.logger.addHandler(hdlr) stderr_needed = False if stderr_needed: hdlr = logging.StreamHandler() hdlr.setFormatter(fmt) self.logger.addHandler(hdlr) return self.logger