Index: /branches/rel_apv_10_7/usr/click/tools/aws/AWSAuthManager.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/tools/aws/AWSAuthManager.py	(revision 39070)
+++ /branches/rel_apv_10_7/usr/click/tools/aws/AWSAuthManager.py	(working copy)
@@ -2,6 +2,7 @@
 
 from aws_auth.AWSAuthController import AWSAuthController
 from logger.ProxyAWSLogger import ProxyAWSLogger
+from WebUILogManager import WebUILogManager
 
 
 class AWSAuthManager():
@@ -71,6 +72,8 @@
             print(log_in_info)
         except Exception as e:
             ProxyAWSLogger.error(str(e))
+            webuiLogger = WebUILogManager()
+            webuiLogger.add_log(f"Cannot get login information. The reason is: {str(e)}")
 
 
 if __name__ == "__main__":
Index: /branches/rel_apv_10_7/usr/click/tools/aws/AWSENIManager.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/tools/aws/AWSENIManager.py	(revision 39070)
+++ /branches/rel_apv_10_7/usr/click/tools/aws/AWSENIManager.py	(working copy)
@@ -4,6 +4,7 @@
 from aws_eni.AWSENIController import AWSENIController
 from aws_eni.AWSENIConfigurator import AWSENIConfigurator
 from aws_auth.AWSAuthController import AWSAuthController
+from WebUILogManager import WebUILogManager
 
 
 class AWSENIManager():
@@ -11,6 +12,7 @@
     This class is used to manually trigger the tasks when the
     failover happens and recover back to the original state.
     """
+    webuiLogger = WebUILogManager()
 
     def __init__(self):
         pass
@@ -19,9 +21,11 @@
     def failover_happen(cls):
         if not AWSAuthController.is_authenticated():
             ProxyAWSLogger.error("Invalid credential")
+            cls.webuiLogger.add_log("Please check the credentials before failover")
             return
         # get eni config
         eni_config = AWSENIConfigurator.get_config()
+        is_failed = False
         # do ip swifting
         for key in eni_config:
             ProxyAWSLogger.info(f'transferring IPs from '
@@ -32,14 +36,20 @@
                     eni_config[key]["src_eni_id"], eni_config[key]["dest_eni_id"])
             except Exception as e:
                 ProxyAWSLogger.error(str(e))
+                cls.webuiLogger.add_log(f"Failover has failed. The reason is: {str(e)}")
+                is_failed = True
+        if not is_failed:
+            cls.webuiLogger.add_log("Failover is successful") # All ip is handled
 
     @classmethod
     def failover_recover(cls):
         if not AWSAuthController.is_authenticated():
             ProxyAWSLogger.error("Invalid credential")
+            cls.webuiLogger.add_log("Please check the credentials before recover")
             return
         # get eni config
         eni_config = AWSENIConfigurator.get_config()
+        is_failed = False
         # do ip swifting
         for key in eni_config:
             ProxyAWSLogger.info(f'transferring IPs from '
@@ -50,6 +60,10 @@
                     eni_config[key]["dest_eni_id"], eni_config[key]["src_eni_id"])
             except Exception as e:
                 ProxyAWSLogger.error(str(e))
+                cls.webuiLogger.add_log(f"Recover has failed. The reason is: {str(e)}")
+                is_failed = True
+        if not is_failed:
+            cls.webuiLogger.add_log("Recover is successful") # All ip is handled
 
 
 if __name__ == '__main__':
Index: /branches/rel_apv_10_7/usr/click/tools/aws/AWSFailoverPoller.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/tools/aws/AWSFailoverPoller.py	(revision 39070)
+++ /branches/rel_apv_10_7/usr/click/tools/aws/AWSFailoverPoller.py	(working copy)
@@ -9,11 +9,14 @@
 from apv_controller.APVController import APVController
 from aws_eni.AWSENIConfigurator import AWSENIConfigurator
 from AWSENIManager import AWSENIManager
+from WebUILogManager import WebUILogManager
 
 
 class AWSFailoverPoller():
     """Handles failover polling for AWS infrastructure."""
 
+    webuiLogger = WebUILogManager()
+
     def __init__(self):
         pass
 
@@ -31,13 +34,19 @@
         in_failover = False
         polling_period = 2  # seconds
         apv_c = APVController()
-        if apv_c.is_primary():
-            ProxyAWSLogger.debug(
-                f"This APV [{apv_c.get_apv_name()}] is primary APV in HA. Stop pooling.")
-            return
+        try:
+            if apv_c.is_primary():
+                ProxyAWSLogger.debug(
+                    f"This APV [{apv_c.get_apv_name()}] is primary APV in HA. Stop pooling.")
+                cls.webuiLogger.add_log(f"Cannot enable the ENI. The reason is: this APV [{apv_c.get_apv_name()}] is primary APV in HA")
+                return
+        except Exception as e:
+            cls.webuiLogger.add_log(f"Cannot enable the ENI. The reason is: {str(e)}")
+            raise
         ProxyAWSLogger.debug(
             f"This APV [{apv_c.get_apv_name()}] is secondary APV in HA.")
         ProxyAWSLogger.info(f'APV [{apv_c.get_apv_name()}] start polling')
+        cls.webuiLogger.add_log("Enable the ENI is successful")
         # pooling
         while True:
             time.sleep(polling_period)
@@ -45,29 +54,32 @@
             print("try pooling ", current_time)
             ProxyAWSLogger.debug("try pooling")
             # primary machine doesn't need to do pooling
-            if apv_c.is_primary():
-                break
-            if not apv_c.is_primary_alive():
-                if not in_failover:
-                    # failover happen
-                    ProxyAWSLogger.info(f"Failover happened")
-                    AWSENIManager.failover_happen()
-
-                    # todo need to verify that all setting are set, and then set is_failover=True
-                    ProxyAWSLogger.info(
-                        "Succeessfully handle failover transition")
-
-                    # set in_failover=True for condition that the primary APV is ON again.
-                    in_failover = True
-                continue
-            elif in_failover:
-                # failover happended before and now the primary APV is ON
-                current_time = datetime.now().strftime("%Y-%m-%d %H %M %S")
-                ProxyAWSLogger.info(f"Failover recover on")
-                AWSENIManager.failover_recover()
-
-                # reset
-                in_failover = False
+            try:
+                if apv_c.is_primary():
+                    break
+                if not apv_c.is_primary_alive():
+                    if not in_failover:
+                        # failover happen
+                        ProxyAWSLogger.info(f"Failover happened")
+                        AWSENIManager.failover_happen()
+
+                        # todo need to verify that all setting are set, and then set is_failover=True
+                        ProxyAWSLogger.info(
+                            "Succeessfully handle failover transition")
+
+                        # set in_failover=True for condition that the primary APV is ON again.
+                        in_failover = True
+                    continue
+                elif in_failover:
+                    # failover happended before and now the primary APV is ON
+                    current_time = datetime.now().strftime("%Y-%m-%d %H %M %S")
+                    ProxyAWSLogger.info(f"Failover recover on")
+                    AWSENIManager.failover_recover()
+
+                    # reset
+                    in_failover = False
+            except Exception as e:
+                cls.webuiLogger.add_log(f"Pooling for ENI has failed. The reason is: {str(e)}")
 
     @classmethod
     def stop(cls) -> None:
@@ -76,6 +88,7 @@
         # get this module name (filename)
         module_name = os.path.basename(__file__)
         cls.kill_poller(module_name)
+        cls.webuiLogger.add_log("Disable the ENI is successful")
 
     @classmethod
     def kill_poller(cls, process_name) -> None:
Index: /branches/rel_apv_10_7/usr/click/tools/aws/WebUILogManager.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/tools/aws/WebUILogManager.py	(revision 0)
+++ /branches/rel_apv_10_7/usr/click/tools/aws/WebUILogManager.py	(working copy)
@@ -0,0 +1,19 @@
+import subprocess
+
+class WebUILogManager():
+    def __init__(self):
+        self.cloud_type = "aws"
+        self.tool_name = "AWS"
+
+    def add_log(self, content):
+        try:
+            command = f'python3 /ca/bin/cloud_logger/LoggerManager.py -t {self.cloud_type} -add "{content}"'
+            res = subprocess.Popen(
+                command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE
+            )
+            stdout, stderr = res.communicate()
+            if res.returncode != 0:
+                raise RuntimeError(f"Error while running {self.tool_name} tools.")
+            return stdout.decode()
+        except subprocess.SubprocessError as e:
+            raise RuntimeError("Subprocess execution failed.")
Index: /branches/rel_apv_10_7/usr/click/tools/aws/aws_auth/AWSAuthController.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/tools/aws/aws_auth/AWSAuthController.py	(revision 39070)
+++ /branches/rel_apv_10_7/usr/click/tools/aws/aws_auth/AWSAuthController.py	(working copy)
@@ -4,6 +4,7 @@
 from botocore.exceptions import NoCredentialsError
 
 from logger.ProxyAWSLogger import ProxyAWSLogger
+from WebUILogManager import WebUILogManager
 
 
 class AWSAuthController():
@@ -14,6 +15,7 @@
         output_format(str): The output format is default to json.
     """
     output_format = 'json'
+    webuiLogger = WebUILogManager()
 
     def __init__() -> None:
         pass
@@ -42,8 +44,10 @@
                 check=True,
             )
             print("AWS CLI configured successfully!")
+            cls.webuiLogger.add_log("Login is successful")
         except Exception as e:
             ProxyAWSLogger.error(str(e))
+            cls.webuiLogger.add_log(f"Login has failed. The reason is: {str(e)}")
 
     @classmethod
     def logout(cls) -> None:
@@ -71,8 +75,10 @@
                 check=True
             )
             print("AWS credentials have been cleared.")
+            cls.webuiLogger.add_log("Logout is successful")
         except subprocess.CalledProcessError as e:
             ProxyAWSLogger.error(f"Error clearing AWS credentials: {e}")
+            cls.webuiLogger.add_log(f"Logout has failed. The reason is: {str(e)}")
 
     @classmethod
     def get_login_info(cls) -> dict:
Index: /branches/rel_apv_10_7/usr/click/tools/aws/aws_eni/AWSENIController.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/tools/aws/aws_eni/AWSENIController.py	(revision 39070)
+++ /branches/rel_apv_10_7/usr/click/tools/aws/aws_eni/AWSENIController.py	(working copy)
@@ -68,9 +68,11 @@
                             )
                         else:
                             ProxyAWSLogger.error(f"{e}")
+                        raise
                     except Exception as e:
                         ProxyAWSLogger.error(f"Fail to tranfer ip pair with "
                                             "{private_ip}: {str(e)}")
+                        raise
                 else:
                     # transfer the private ip
                     try:
@@ -93,9 +95,11 @@
                             print(src_eni_id, allocation_id, private_ip)
                         else:
                             ProxyAWSLogger.error(f"{e}")
+                        raise
                     except Exception as e:
                         ProxyAWSLogger.error(f"Fail to tranfer ip pair with "
                                             "{ private_ip}: {str(e)}")
+                        raise
 
     @classmethod
     def _transfer_secondary_private_ip(cls, src_eni_id: str, dest_eni_id: str, private_ip: str):
Index: /branches/rel_apv_10_7/usr/click/tools/azure/AZFailoverManager.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/tools/azure/AZFailoverManager.py	(revision 39070)
+++ /branches/rel_apv_10_7/usr/click/tools/azure/AZFailoverManager.py	(working copy)
@@ -6,6 +6,7 @@
 from az_route_table.RouteTableFailoverManager import RouteTableFailoverManager
 from ConfigManager import IPConfigManager
 from logger.ProxyAZLogger import ProxyAZLogger
+from WebUILogManager import WebUILogManager
 
 
 class AZFailoverManager():
@@ -21,6 +22,7 @@
         # self.from_ip_config_name = ip_config_setting['from_ip_config_name']
         self.to_nic_name = ip_config_setting['to_nic_name']
         # self.to_ip_config_name = ip_config_setting['to_ip_config_name']
+        self.webuiLogger = WebUILogManager()
     def failover_happen(self):
         '''transfer ip config.'''
         ProxyAZLogger.info("start to transfer all IPs")
@@ -28,8 +30,10 @@
         try:
             nicC.transfer_all_ip_config(from_nic_name=self.from_nic_name, to_nic_name=self.to_nic_name)
             ProxyAZLogger.info("finish transfering all IPs")
+            self.webuiLogger.add_log("Failover is successful")
         except Exception as e:
             ProxyAZLogger.error("Fail to transfer all ip config: "+str(e))
+            self.webuiLogger.add_log(f"Failover has failed. The reason is: {str(e)}")
 
     def failover_recover(self):
         ProxyAZLogger.info("start to transfer all IPs")
@@ -37,8 +41,10 @@
         try:
             nicC.transfer_all_ip_config(from_nic_name=self.to_nic_name, to_nic_name= self.from_nic_name)
             ProxyAZLogger.info("finish to transfer all IPs")
+            self.webuiLogger.add_log("Recover is successful")
         except Exception as e:
             ProxyAZLogger.error("Fail to transfer all ip config: "+str(e))
+            self.webuiLogger.add_log(f"Recover has failed. The reason is: {str(e)}")
 
 
 if __name__=="__main__":
@@ -53,6 +59,10 @@
     if args.mode=='1' or args.mode=='2':
         ip_config_manager = IPConfigManager(setting_file_location)
         ip_config_setting_json = ip_config_manager.get_ip_config()
+        if not ip_config_setting_json:
+            webuiLogger = WebUILogManager()
+            operation = "recover" if args.mode=='2' else "failover"
+            webuiLogger.add_log(f"Please add NIC before {operation}")
         for i in ip_config_setting_json:
             data = ip_config_setting_json[i]
             az_failover_manager = AZFailoverManager(data)
Index: /branches/rel_apv_10_7/usr/click/tools/azure/UDRPoller.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/tools/azure/UDRPoller.py	(revision 39070)
+++ /branches/rel_apv_10_7/usr/click/tools/azure/UDRPoller.py	(working copy)
@@ -7,12 +7,14 @@
 from az_route_table.RouteTableController import RouteTableController
 from RouteConfigManager import RouteConfigManager
 from logger.ProxyAZLogger import ProxyAZLogger
+from WebUILogManager import WebUILogManager
 
 
 class UDRPoller():
     def __init__(self, setting_file_location:str) -> None:
         self.setting_file_location = setting_file_location
         self.reload_route_table_config_setting_json()
+        self.webuiLogger = WebUILogManager()
 
     def reload_route_table_config_setting_json(self):
         route_config_manager = RouteConfigManager(self.setting_file_location)
@@ -43,6 +45,7 @@
             route_table_update_count_list.append(0)
             route_table_controller_list.append(route_table_controller)
 
+        self.webuiLogger.add_log("Enable the UDR is successful")
         while True:
             # self.reload_route_table_config_setting_json()
             time.sleep(polling_period)
@@ -62,6 +65,7 @@
                         )
                     except Exception as e:
                         ProxyAZLogger.error("Fail change all UDR route: "+str(e))
+                        self.webuiLogger.add_log(f"UDR pooling has faild. The reason is: {str(e)}")
                     # set vm status
                     is_target_vm_down_list[i]=True
                 else:
@@ -74,6 +78,7 @@
                         )
                     except Exception as e:
                         ProxyAZLogger.error("Fail change all UDR route: "+str(e))
+                        self.webuiLogger.add_log(f"UDR pooling has faild. The reason is: {str(e)}")
                     # set vm status
                     is_target_vm_down_list[i]=False
 
@@ -98,6 +103,7 @@
         # get this module name (filename)
         module_name = os.path.basename(__file__)
         self.kill_poller(module_name)
+        self.webuiLogger.add_log("Disable the UDR is successful")
 
     def kill_poller(self, process_name):
         '''This method will kill all the process with the same name of process_name.'''
Index: /branches/rel_apv_10_7/usr/click/tools/azure/WebUILogManager.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/tools/azure/WebUILogManager.py	(revision 0)
+++ /branches/rel_apv_10_7/usr/click/tools/azure/WebUILogManager.py	(working copy)
@@ -0,0 +1,19 @@
+import subprocess
+
+class WebUILogManager():
+    def __init__(self):
+        self.cloud_type = "azure"
+        self.tool_name = "Azure"
+
+    def add_log(self, content):
+        try:
+            command = f'python3 /ca/bin/cloud_logger/LoggerManager.py -t {self.cloud_type} -add "{content}"'
+            res = subprocess.Popen(
+                command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE
+            )
+            stdout, stderr = res.communicate()
+            if res.returncode != 0:
+                raise RuntimeError(f"Error while running {self.tool_name} tools.")
+            return stdout.decode()
+        except subprocess.SubprocessError as e:
+            raise RuntimeError("Subprocess execution failed.")
Index: /branches/rel_apv_10_7/usr/click/tools/azure/apv_controller/APVController.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/tools/azure/apv_controller/APVController.py	(revision 39070)
+++ /branches/rel_apv_10_7/usr/click/tools/azure/apv_controller/APVController.py	(working copy)
@@ -5,6 +5,7 @@
 
 from logger.ProxyAZLogger import ProxyAZLogger
 from apv_controller.APVCommander import APVCommander
+from WebUILogManager import WebUILogManager
 
 
 class APVController():
@@ -67,6 +68,8 @@
         if not group_priority_list:
             error_msg = "Error: cannot find APV group priority in " + context
             ProxyAZLogger.error(error_msg)
+            self.webuiLogger = WebUILogManager()
+            self.webuiLogger.add_log(f"APV has failed, the reason is: {context}")
             exit(1)
 
         group_priority_list = [(item[0], int(item[1])) for item in group_priority_list] # make priority of string to integer
Index: /branches/rel_apv_10_7/usr/click/tools/azure/az_auth/AZAuthController.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/tools/azure/az_auth/AZAuthController.py	(revision 39070)
+++ /branches/rel_apv_10_7/usr/click/tools/azure/az_auth/AZAuthController.py	(working copy)
@@ -5,10 +5,12 @@
 import re
 
 from logger.AZLogger import AZLogger
+from WebUILogManager import WebUILogManager
 
 class AZAuthController():
     def __init__(self) -> None:
-        pass
+        self.webuiLogger = WebUILogManager()
+
     def get_login_message_file_path(self, file_name)->str:
         directory = '/tmp'
         if not os.path.exists(directory):
@@ -63,8 +65,10 @@
         result = subprocess.run(command, stdout=sys.stdout, stderr=sys.stderr)
         if result.returncode==0:
             print("Successfully signed out of the Azure account.")
+            self.webuiLogger.add_log("Logout is successful")
         else:
             print("Fail to log out az account.\n")
+            self.webuiLogger.add_log("Logout has failed")
 
     def is_az_login(self):
         '''
Index: /branches/rel_apv_10_7/usr/click/tools/azure/az_nic/NICController.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/tools/azure/az_nic/NICController.py	(revision 39070)
+++ /branches/rel_apv_10_7/usr/click/tools/azure/az_nic/NICController.py	(working copy)
@@ -100,6 +100,7 @@
             update_flag = True
         except Exception as e:
             print(f"An error occurred while removing the secondary IP configuration: {str(e)}")
+            raise
 
         if update_flag:
             try:
@@ -108,6 +109,7 @@
                 print(f"Successfully add all IPs to {nic_name2}")
             except Exception as e:
                 print(f"An error occurred while adding the secondary IP configuration: {str(e)}")
+                raise
 
 
 if __name__=="__main__":
Index: /branches/rel_apv_10_7/usr/click/tools/cloud_logger/LoggerManager.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/tools/cloud_logger/LoggerManager.py	(revision 0)
+++ /branches/rel_apv_10_7/usr/click/tools/cloud_logger/LoggerManager.py	(working copy)
@@ -0,0 +1,76 @@
+import argparse
+from ProxyWebUILogger import ProxyWebUILogger
+from WebUILogger import CloudParam
+import datetime
+
+class LoggerManager():
+    def __init__(self, cloud_type):
+        self.logger = ProxyWebUILogger(cloud_type)
+        self.timestamp_format = "%Y-%m-%dT%H:%M:%S"
+
+    def check_Logger_state(self)->bool:
+        return self.logger.get_logger_state()
+
+    def get_log(self, number_of_line: int = None) -> None:
+        log_list = self.logger.get_log_list()
+        logs_with_date = []
+        current_log_entry = []
+        current_timestamp = None
+        for line in log_list:
+            if line.startswith("[") and "]" in line:
+                timestamp_str = line.split("]")[0][1:]
+                if current_log_entry:
+                    logs_with_date.append((current_timestamp, "\n".join(current_log_entry)))
+                    current_log_entry = []
+                try:
+                    current_timestamp = datetime.datetime.strptime(timestamp_str, self.timestamp_format)
+                except ValueError:
+                    continue
+            current_log_entry.append(line.strip())
+            if number_of_line and len(current_log_entry) > number_of_line:
+                break
+        if current_log_entry:
+            logs_with_date.append((current_timestamp, "\n".join(current_log_entry)))
+        logs_with_date.sort(key=lambda x: x[0], reverse=True)
+        for _, log_entry in logs_with_date:
+            print(log_entry)
+
+    def show_log(self) -> str:
+        self.logger.get_log()
+
+    def get_log_file_path(self)->str:
+        log_file_path = self.logger.get_log_file_path()
+        return log_file_path
+
+    def debug(self, content) -> None:
+        self.logger.debug(content)
+
+if __name__=='__main__':
+    description = """This API is used to
+    1. dump the log message.
+    2. check current logger status"""
+    available = [
+        CloudParam.AZURE,
+        CloudParam.AWS,
+    ]
+    parser = argparse.ArgumentParser(description=description)
+    parser.add_argument('-t', type=str, choices=available, help='Enter valid cloud type' , required=True)
+    parser.add_argument('-mode', type=str, choices=["show", "status", "getlogpath"], help='Enter [status], [getlogpath], or [show]')
+    parser.add_argument('-lines', type=int, help='the number of line of shown log', default=0)
+    parser.add_argument('-add', type=str, nargs='?', help='Add text to log')
+
+    args = parser.parse_args()
+
+    loggerManager = LoggerManager(args.t)
+
+    if  args.mode=="show":
+        log = loggerManager.get_log(args.lines)
+    elif args.mode=="status":
+        print(loggerManager.check_Logger_state())
+    elif args.mode=="getlogpath":
+        print(loggerManager.get_log_file_path())
+
+    if args.add is not None and not args.add.strip():
+        print("Error: -add argument cannot be empty!")
+    if args.add and loggerManager:
+        loggerManager.debug(args.add)
Index: /branches/rel_apv_10_7/usr/click/tools/cloud_logger/ProxyWebUILogger.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/tools/cloud_logger/ProxyWebUILogger.py	(revision 0)
+++ /branches/rel_apv_10_7/usr/click/tools/cloud_logger/ProxyWebUILogger.py	(working copy)
@@ -0,0 +1,89 @@
+from WebUILogger import WebUILogger, AbstractWebUILogger, CloudParam
+import os
+import json
+
+class ProxyWebUILogger(AbstractWebUILogger):
+    """
+    This class is designed using the proxy pattern, a structural design pattern.
+    """
+    def __init__(self, cloud_type):
+        self.webUILogger = WebUILogger(cloud_type)
+        self.config_module_dir = self.webUILogger.get_config_module_dir()
+        self.is_logger_on = self.get_logger_state()
+
+    def get_config(self)->dict:
+        """This method is used to get config of WebUI log"""
+        return self.webUILogger.config
+
+    def is_config_modified(self) -> bool:
+        """This method is used to check if the configuration file
+        is modified or not.
+        The alogrithem to do that is check if there is the modified
+        file existed.
+        If the file existed, the configuration file is modified;
+        otherwise, the configuration is unchaged.
+        """
+        return os.path.exists(os.path.join(self.config_module_dir,
+                                           CloudParam.MODIFIED_FILE))
+
+    def _refresh_config(self)->None:
+        """If the config file indictor file is existed,
+        then reload the configuration file and delete indictor file."""
+        if self.is_config_modified():
+            self.webUILogger.reload_config()
+            with open(self.webUILogger.config_file_path, 'r') as config_file:
+                config = json.load(config_file)
+            self.is_logger_on = config[CloudParam.LOG_SATUS_PARAM]
+            # delete config file changed indicator
+            os.remove(os.path.join(self.config_module_dir,
+                                   CloudParam.MODIFIED_FILE))
+
+    def get_log(self)->str:
+        """return a string of content of log file"""
+        file_path = self.get_log_file_path()
+        with open(file_path, 'r', encoding='utf-8') as file:
+            content = file.read()
+        return content
+
+    def get_log_list(self) -> list:
+        """return a list of content of log file"""
+        with open(self.get_log_file_path(), "r") as file:
+            lines = file.readlines()
+        return lines
+
+    def get_logger_state(self)->bool:
+        """This is used to check if logger is on or not
+        return True if logger is on
+        return False if logger is off
+        """
+        file_path = os.path.join(self.config_module_dir,
+                                 CloudParam.CONFIG_FILE)
+        try:
+            with open(file_path, 'r') as config_file:
+                config = json.load(config_file)
+                if CloudParam.LOG_SATUS_PARAM in config:
+                    return config[CloudParam.LOG_SATUS_PARAM]
+        except FileNotFoundError:
+            print(f"Error: The file {file_path} was not found.")
+        except json.JSONDecodeError:
+            print(f"Error: The file {file_path} is not a valid JSON file.")
+        return False
+
+    def get_log_file_path(self)->str:
+        config = self.get_config()
+        return config[CloudParam.LOG_PATH_PARAM]
+
+    def debug(self, message:str)->None:
+        self._refresh_config()
+        if self.is_logger_on:
+            self.webUILogger.debug(message)
+
+if __name__=="__main__":
+    # test code
+    import time
+    webuiLogger = ProxyWebUILogger(CloudParam.AZURE)
+    webuiLogger.debug("This is a proxy debug message")
+    mb = 5
+    for i in range(mb*5000):
+        webuiLogger.debug(f"This is a proxy debug message {i}")
+        time.sleep(1)
Index: /branches/rel_apv_10_7/usr/click/tools/cloud_logger/WebUILogger.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/tools/cloud_logger/WebUILogger.py	(revision 0)
+++ /branches/rel_apv_10_7/usr/click/tools/cloud_logger/WebUILogger.py	(working copy)
@@ -0,0 +1,102 @@
+import logging
+from logging.handlers import RotatingFileHandler
+import json
+from abc import ABC, abstractmethod
+import os
+
+class CloudParam():
+    AZURE = "azure" # for cloud type
+    AWS = "aws" # for cloud type
+    AZURE_LOG_PATH_PARAM = "azure_log_path"
+    AWS_LOG_PATH_PARAM = "aws_log_path"
+    AZURE_MODULE_DIR = "azure"
+    AWS_MODULE_DIR = "aws"
+    CLOUD_LOGGER_DIR = "logger"
+    CONFIG_FILE = "config.json"
+    MODIFIED_FILE = "config_modified.txt"
+    LOG_PATH_PARAM = "log_path"
+    LOG_SATUS_PARAM = "is_logger_on"
+
+class AbstractWebUILogger(ABC):
+    @classmethod
+    @abstractmethod
+    def debug(cls, message:str)->None:
+        pass
+
+class WebUILogger(AbstractWebUILogger):
+    """
+    This class is used to log the webui event.
+    We use the python build-in logging under the hood to implement this class.
+    """
+    def __init__(self, cloud_type):
+        self.cloud_type = cloud_type
+        self.logger = logging.getLogger("CloudWebUILogger")
+        self.current_module_directory = os.path.dirname(os.path.abspath(__file__))
+        self.config_file_path = os.path.join(self.current_module_directory, CloudParam.CONFIG_FILE)
+        self.config = self.load_config(self.config_file_path)
+        self._log_handler(False)
+
+    def load_config(self, file_path):
+        param_map = {
+            CloudParam.AZURE: CloudParam.AZURE_LOG_PATH_PARAM,
+            CloudParam.AWS: CloudParam.AWS_LOG_PATH_PARAM,
+        }
+        try:
+            with open(file_path, 'r') as config_file:
+                config = json.load(config_file)
+                if self.cloud_type in param_map:
+                    config["log_path"] = config[param_map[self.cloud_type]]
+                return config
+        except FileNotFoundError:
+            print(f"Error: The file {file_path} was not found.")
+        except json.JSONDecodeError:
+            print(f"Error: The file {file_path} is not a valid JSON file.")
+
+    def _log_handler(self, is_reload):
+        log_path = self.config["log_path"]
+        log_format = self.config["log_format"]
+        max_size_log_file = self.config["max_size_log_file"] #MB
+        # logger
+        self.logger.setLevel(logging.DEBUG)
+        if is_reload:
+            # Remove all existing handlers
+            for handler in self.logger.handlers[:]:  # Create a copy of the list for safe iteration
+                self.logger.removeHandler(handler)
+        # log handler
+        file_handler = RotatingFileHandler(log_path, maxBytes=max_size_log_file*1024*1024, backupCount=1)
+        # log formatter
+        file_formatter = logging.Formatter(log_format, datefmt=self.config["datefmt"])
+        file_handler.setFormatter(file_formatter)
+
+        self.logger.addHandler(file_handler)
+
+    def debug(self, message:str)->None:
+        self.logger.debug(message)
+
+    def reload_config(self)->None:
+        self._log_handler(True)
+
+    def get_config_module_dir(self) -> str:
+        dir_map = {
+            CloudParam.AZURE: CloudParam.AZURE_MODULE_DIR,
+            CloudParam.AWS: CloudParam.AWS_MODULE_DIR,
+        }
+        if self.cloud_type not in dir_map:
+            raise FileNotFoundError(f"Cannot find the config file by the cloud type")
+        cloud_module_dir = dir_map[self.cloud_type]
+        cloud_module_directory = os.path.abspath(os.path.join(self.current_module_directory,
+                                                                "..",
+                                                                cloud_module_dir,
+                                                                CloudParam.CLOUD_LOGGER_DIR))
+        return cloud_module_directory
+
+if __name__=="__main__":
+    # test code
+    import time
+    webuiLogger = WebUILogger(CloudParam.AZURE)
+    webuiLogger.debug("This is a debug message")
+    mb = 1
+    for i in range(mb*5000):
+        webuiLogger.reload_config()
+        webuiLogger.debug(f"This is a debug message {i}")
+        time.sleep(1)
Index: /branches/rel_apv_10_7/usr/click/tools/cloud_logger/__init__.py	(added)
===================================================================
--- /branches/rel_apv_10_7/usr/click/tools/cloud_logger/__init__.py	(revision 0)
+++ /branches/rel_apv_10_7/usr/click/tools/cloud_logger/__init__.py	(revision 0)
Index: /branches/rel_apv_10_7/usr/click/tools/cloud_logger/config.json
===================================================================
--- /branches/rel_apv_10_7/usr/click/tools/cloud_logger/config.json	(revision 0)
+++ /branches/rel_apv_10_7/usr/click/tools/cloud_logger/config.json	(working copy)
@@ -0,0 +1,7 @@
+{
+    "azure_log_path": "/var/crash/azure_ha_webui.log",
+    "aws_log_path": "/var/crash/aws_ha_webui.log",
+    "log_format": "[%(asctime)s] - %(message)s",
+    "max_size_log_file": 2,
+    "datefmt": "%Y-%m-%dT%H:%M:%S"
+}
\ No newline at end of file
Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/apv/templates/network/cloud/aws/log.html
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/apv/templates/network/cloud/aws/log.html	(revision 39070)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/apv/templates/network/cloud/aws/log.html	(working copy)
@@ -16,20 +16,6 @@
             </fieldset>
             <fieldset>
                 <div class="form-group">
-                    <label class="col-md-3 control-label">{% trans %}Level{% endtrans %}</label>
-                    <div class="col-md-9">
-                        <select class="selectpicker select-level">
-                            <option value="debug">0: {% trans %}Debug{% endtrans %}</option>
-                            <option value="info">1: {% trans %}Info{% endtrans %}</option>
-                            <option value="warning">2: {% trans %}Warning{% endtrans %}</option>
-                            <option value="error">3: {% trans %}Error{% endtrans %}</option>
-                        </select>
-                        <span class="field-icon-set"><i class="fa fa-question-circle" style="display:none;"></i></span>
-                    </div>
-                </div>
-            </fieldset>
-            <fieldset>
-                <div class="form-group">
                     <label class="col-md-3 control-label"></label>
                     <div class="col-md-9">
                         <button type="button" class="btn btn-primary download-btn">{% trans %}Download{% endtrans %}</button>
@@ -93,20 +79,6 @@
                 console.log(textStatus + "," + errorThrown + "," + xhr.responseText);
             }
         }));
-        ajaxes.push($.ajax({
-            url: '/api/v1/cloud/aws/log/severity/',
-            type: 'PUT',
-            dataType: 'json',
-            data: JSON.stringify({
-                severity: $(".select-level").selectpicker('val')
-            }),
-            success: function (res) {
-                refreshPage();
-            },
-            error: function (xhr, textStatus, errorThrown) {
-                console.log(textStatus + "," + errorThrown + "," + xhr.responseText);
-            }
-        }));
         refreshPage();
     });
 
@@ -149,33 +121,6 @@
         return res;
     }
 
-    async function getLogLevel() {
-        // get the current log level
-        const res = await new Promise((resolve, reject) => {
-            console.log("getLogLevel")
-            $.ajax({
-            url: '/api/v1/cloud/aws/log/severity/',
-            type: 'GET',
-            dataType: 'json',
-            success: function (response) {
-                if (typeof(response["severity"]) == "undefined") {
-                    reject("Status undefined");
-                }
-                $('.select-level').selectpicker("val", response["severity"]);
-                $('.btn-static').css('display', 'none');
-
-                resolve(response);  // Resolve the promise with the response data
-            },
-            error: function (xhr, textStatus, errorThrown) {
-                console.log(textStatus + "," + errorThrown + "," + xhr.responseText);
-                reject(errorThrown);  // Reject the promise on AJAX error
-            }
-            });
-        });
-        console.log("finish getLogLevel")
-        return res;
-
-    }
     async function getLog() {
         // get the content of log
         const res = await new Promise((resolve, reject) => {
@@ -206,7 +151,7 @@
     async function initPage(){
         console.log("init")
         // Run all three functions asynchronously
-        await Promise.all([getEnableStatus(), getLogLevel(), getLog()]);
+        await Promise.all([getEnableStatus(), getLog()]);
         // Once all functions are completed, hide the element
         console.log("display none");
         $('.btn-static').css('display', 'none');
@@ -228,31 +173,12 @@
                 });
             }
         });
-        $(".select-level").change(function() {
-            // add the event listener to the log level select
-            $('#frame_model_main .btn-static').fadeIn("slow");
-            if ($(".btn-static").is(":visible")) {
-                var buttonH = $(".btn-static").offset().top;
-                $(function(){
-                    $(window).scroll(function(){
-                        var scrollH = $(this).scrollTop();
-                        if (scrollH >= buttonH) {
-                            $(".btn-switch").addClass("btn-fixed");
-                        }else{
-                            $(".btn-switch").removeClass("btn-fixed");
-                        }
-                    });
-                });
-            }
-        });
     }
 
     function refreshPage() {
         $('.config-nav li.active a').trigger('click');
     }
 
-    $('.select-level').selectpicker();
-
 });
 
 </script>
Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/apv/templates/network/cloud/azure/log.html
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/apv/templates/network/cloud/azure/log.html	(revision 39070)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/apv/templates/network/cloud/azure/log.html	(working copy)
@@ -16,20 +16,6 @@
             </fieldset>
             <fieldset>
                 <div class="form-group">
-                    <label class="col-md-3 control-label">{% trans %}Level{% endtrans %}</label>
-                    <div class="col-md-9">
-                        <select class="selectpicker select-level">
-                            <option value="debug">0: {% trans %}Debug{% endtrans %}</option>
-                            <option value="info">1: {% trans %}Info{% endtrans %}</option>
-                            <option value="warning">2: {% trans %}Warning{% endtrans %}</option>
-                            <option value="error">3: {% trans %}Error{% endtrans %}</option>
-                        </select>
-                        <span class="field-icon-set"><i class="fa fa-question-circle" style="display:none;"></i></span>
-                    </div>
-                </div>
-            </fieldset>
-            <fieldset>
-                <div class="form-group">
                     <label class="col-md-3 control-label"></label>
                     <div class="col-md-9">
                         <button type="button" class="btn btn-primary download-btn">{% trans %}Download{% endtrans %}</button>
@@ -80,45 +66,7 @@
         });
     }
     enableSwitch.on('switch-change', function(e, data) {
-        if (is_init < 2) {
-            return;
-        }
-        $('#frame_model_main .btn-static').fadeIn("slow");
-        if ($(".btn-static").is(":visible")) {
-            var buttonH = $(".btn-static").offset().top;  
-            $(function(){ 
-                $(window).scroll(function(){ 
-                    var scrollH = $(this).scrollTop();  
-                    if (scrollH >= buttonH) {
-                        $(".btn-switch").addClass("btn-fixed");
-                    }else{  
-                        $(".btn-switch").removeClass("btn-fixed");
-                    } 
-                });
-            });
-        }
-    });
-    $('.select-level').selectpicker();
-    getLogLevel();
-    function getLogLevel() {
-        $.ajax({
-            url: '/api/v1/cloud/az/log/severity/',
-            type: 'GET',
-            dataType: 'json',
-            success: function (res) {
-                if (typeof(res["severity"]) == "undefined") {
-                    return;
-                }
-                $('.select-level').selectpicker("val", res["severity"]);
-                is_init++;
-            },
-            error: function (xhr, textStatus, errorThrown) {
-                console.log(textStatus + "," + errorThrown + "," + xhr.responseText);
-            }
-        });
-    }
-    $(".select-level").change(function() {
-        if (is_init < 2) {
+        if (is_init < 1) {
             return;
         }
         $('#frame_model_main .btn-static').fadeIn("slow");
@@ -159,20 +107,6 @@
             },
             error: function (xhr, textStatus, errorThrown) {
                 console.log(textStatus + "," + errorThrown + "," + xhr.responseText);
-            }
-        }));
-        ajaxes.push($.ajax({
-            url: '/api/v1/cloud/az/log/severity/',
-            type: 'PUT',
-            dataType: 'json',
-            data: JSON.stringify({
-                severity: $(".select-level").selectpicker('val')
-            }),
-            success: function (res) {
-                refreshPage();
-            },
-            error: function (xhr, textStatus, errorThrown) {
-                console.log(textStatus + "," + errorThrown + "," + xhr.responseText);
             }
         }));
         $.when.apply($, ajaxes)
Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/cloud/aws/aws_log_view.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/cloud/aws/aws_log_view.py	(revision 39070)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/cloud/aws/aws_log_view.py	(working copy)
@@ -6,6 +6,7 @@
 
 from hive.utils import aninfo, anerror
 
+cloud_type = "aws"
 
 def validate_input(data, required_keys):
     """Validates if the required keys are present in the input data."""
@@ -48,7 +49,7 @@
     Returns:
         HttpResponse: A response containing the log buffer.
     """
-    command = "python3 /ca/bin/aws/LoggerManager.py -mode show"
+    command = "python3 /ca/bin/cloud_logger/LoggerManager.py -t %s -mode show" % cloud_type
     try:
         log_buffer = run_command(command)
         return create_json_response({"msg": log_buffer}, 200)
@@ -70,7 +71,7 @@
         "True\n": 1,
         "False\n": 0
     }
-    command = "python3 /ca/bin/aws/LoggerManager.py -mode status"
+    command = "python3 /ca/bin/cloud_logger/LoggerManager.py -t %s -mode status" % cloud_type
     try:
         switcher = run_command(command)
         return create_json_response({"status": output_map[switcher]}, 200)
@@ -112,57 +113,6 @@
     except RuntimeError:
         return create_json_response({"msg": "error while running aws tools."}, 500)
 
-
-def get_log_severity(request):
-    """
-    Get the severity level of log functionality of aws tool from vAPV.
-
-    Returns:
-        HttpResponse: A response containing the severity level.
-    """
-    command = "python3 /ca/bin/aws/LoggerManager.py -level status"
-    try:
-        severity = run_command(command)
-        aninfo("hive.debug", "Succeeded to get log severity.")
-        return create_json_response({"severity": severity.replace("\n", "")}, 200)
-    except RuntimeError as e:
-        anerror("hive.debug", str(e))
-        return create_json_response(
-            {"msg": "Error while getting severity level"}, 500)
-
-
-def post_log_severity(request):
-    """
-    Set the severity level of log functionality of aws tool on vAPV.
-
-    Returns:
-        HttpResponse: A response indicating the success or failure of
-                      the severity level setting process.
-    """
-    required_keys = ["severity"]
-    data = json.loads(request.body)
-
-    # Validate input
-    is_valid, message = validate_input(data, required_keys)
-    if not is_valid:
-        return create_json_response({"msg": message}, 400)
-
-    if data["severity"] not in ["debug", "info", "warning", "error"]:
-        return create_json_response(
-            {"msg": "severity should be one of debug, info, warning, error"}, 400)
-
-    command = ("python3 /ca/bin/aws/LoggerManager.py -level "
-               "{}".format(data["severity"]))
-    try:
-        output = run_command(command)
-        aninfo("hive.debug", "Succeeded to set log severity: "
-               "{}".format(data["severity"]))
-        return create_json_response({"msg": "Succeed"}, 200)
-    except RuntimeError as e:
-        aninfo("hive.debug", str(e))
-        return create_json_response({"msg": "error while running aws tools."}, 501)
-
-
 def download_log_file(request):
     """
     Get the log file of aws tool from vAPV.
@@ -170,7 +120,7 @@
     Returns:
         HttpResponse: A response containing the log file.
     """
-    command = "python3 /ca/bin/aws/LoggerManager.py -mode getlogpath"
+    command = "python3 /ca/bin/cloud_logger/LoggerManager.py -t %s -mode getlogpath" % cloud_type
     try:
         log_file_path = run_command(command)
         log_file_path = log_file_path.replace("\n", "")
Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/cloud/aws/urls.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/cloud/aws/urls.py	(revision 39070)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/cloud/aws/urls.py	(working copy)
@@ -21,8 +21,6 @@
     get_log_buffer,
     get_switcher,
     post_switcher,
-    get_log_severity as get_aws_log_severity,
-    post_log_severity,
     download_log_file as download_aws_log_file
 )
 
@@ -90,14 +88,6 @@
     return get_bad_http_method()
 
 
-def aws_log_severity_method_router(request):
-    if request.method == "GET":
-        return get_aws_log_severity(request)
-    elif request.method == "PUT":
-        return post_log_severity(request)
-    return get_bad_http_method()
-
-
 def aws_log_file_method_router(request):
     if request.method == "GET":
         return download_aws_log_file(request)
@@ -114,6 +104,5 @@
     url(r'^ha/status/$', aws_ha_status_method_router),
     url(r'^log/buffer/$', aws_log_buffer_method_router),
     url(r'^log/status/$', aws_switcher_method_router),
-    url(r'^log/severity/$', aws_log_severity_method_router),
     url(r'^log/file/$', aws_log_file_method_router),
 )
\ No newline at end of file
Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/cloud/az/az_log_view.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/cloud/az/az_log_view.py	(revision 39070)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/cloud/az/az_log_view.py	(working copy)
@@ -4,9 +4,10 @@
 
 from hive.utils import aninfo, anerror
 
+cloud_type = "azure"
 
 def get_all_log(request):
-    command = "python3 /ca/bin/azure/LoggerManager.py -mode show"
+    command = "python3 /ca/bin/cloud_logger/LoggerManager.py -t %s -mode show" % cloud_type
     res = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     stdout, stderr = res.communicate()
     if stderr:
@@ -24,7 +25,7 @@
         )
 
 def download_log_file(request):
-    command = "python3 /ca/bin/azure/LoggerManager.py -mode getlogpath"
+    command = "python3 /ca/bin/cloud_logger/LoggerManager.py -t %s -mode getlogpath" % cloud_type
     res = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     stdout, stderr = res.communicate()
     if stderr:
@@ -64,57 +65,9 @@
         status=200
     )
 
-def get_log_severity(request):
-    command = "python3 /ca/bin/azure/LoggerManager.py -level status"
-    res = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-    stdout, stderr = res.communicate()
-
-    if stderr:
-        anerror("hive.debug", stderr)
-        return HttpResponse(
-        json.dumps({"message":"error while running az tools"}),
-            content_type="application/json",
-            status=500
-        )
-    aninfo("hive.debug", "get log severity: {}".format(stdout.replace("\n", "")))
-    return HttpResponse(
-        json.dumps({"severity":stdout.replace("\n", "")}),
-        content_type="application/json",
-        status=200
-    )
-def set_log_severity(request):
-    # verify user input
-    required_keys = ["severity"]
-
-    data = json.loads(request.body)
-    for key in required_keys:
-        if key not in data:
-            return HttpResponse(
-                json.dumps({"message":"body should contain key: {}".format(', '.join(required_keys))}),
-                content_type="application/json",
-                status=400
-            ) 
-    allow_severity = ["debug", "info", "warning", "error"]
-    if not data["severity"] in allow_severity:
-        return HttpResponse(
-            json.dumps({"message":"status should be: {}".format(','.join(allow_severity))}),
-            content_type="application/json",
-            status=400
-        )
-    # call az tools
-    command = 'python3 /ca/bin/azure/LoggerManager.py -level {}'.format(data["severity"])
-    res = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-    stdout, stderr = res.communicate()
-    if stderr:
-        anerror("hive.debug", stderr)
-    return HttpResponse(
-        json.dumps({"message":"succeed"}),
-        content_type="application/json",
-        status=201
-    )
 def get_log_status(request):
-    '''This method is used to check if az tool log functionality is on or off.'''
-    command = "python3 /ca/bin/azure/LoggerManager.py -mode status"
+    """This method is used to check if az tool log functionality is on or off."""
+    command = "python3 /ca/bin/cloud_logger/LoggerManager.py -t %s -mode status" % cloud_type
     res = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     stdout, stderr = res.communicate()
     if stderr:
@@ -133,7 +86,7 @@
     )
 
 def switch_log_status(request):
-    '''This method is used to set az tool log functionality to on or off.'''
+    """This method is used to set az tool log functionality to on or off."""
     # verify user input
     required_keys = ["status"]
     data = json.loads(request.body)
Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/cloud/az/urls.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/cloud/az/urls.py	(revision 39070)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/cloud/az/urls.py	(working copy)
@@ -27,9 +27,7 @@
     get_all_log,
     get_log_status,
     download_log_file as download_az_log_file,
-    switch_log_status,
-    get_log_severity as get_az_log_severity,
-    set_log_severity
+    switch_log_status
 )
 
 
@@ -127,14 +125,6 @@
     return get_bad_http_method()
 
 
-def az_log_severity_method_router(request):
-    if request.method=="GET":
-        return get_az_log_severity(request)
-    if request.method=="PUT":
-        return set_log_severity(request)
-    return get_bad_http_method()
-
-
 urlpatterns = patterns(
     '',
     url(r'^login/$', az_login_method_router),
@@ -150,5 +140,4 @@
     url(r'^logfile/$', az_logfile_method_router),
     url(r'^log/$', az_log_method_router),
     url(r'^log/status/$', az_log_status_method_router),
-    url(r'^log/severity/$', az_log_severity_method_router),
 )
\ No newline at end of file
