1ba991379Sopenharmony_ci# encoding=utf-8
2ba991379Sopenharmony_cifrom util import time_info
3ba991379Sopenharmony_ci
4ba991379Sopenharmony_ciimport os
5ba991379Sopenharmony_ciimport sys
6ba991379Sopenharmony_ci
7ba991379Sopenharmony_ci
8ba991379Sopenharmony_ciclass Singleton():
9ba991379Sopenharmony_ci    _instance = None
10ba991379Sopenharmony_ci    def __new__(cls, *args, **kw):
11ba991379Sopenharmony_ci        if not hasattr(cls, '_instance'):
12ba991379Sopenharmony_ci            cls._instance = super(Singleton, cls).__new__(cls, *args, **kw)
13ba991379Sopenharmony_ci        else:
14ba991379Sopenharmony_ci            return cls._instance
15ba991379Sopenharmony_ci
16ba991379Sopenharmony_ciclass Logger():
17ba991379Sopenharmony_ci
18ba991379Sopenharmony_ci    __info = "[INFO ]"
19ba991379Sopenharmony_ci    __error = "[ERROR ]"
20ba991379Sopenharmony_ci    __debug = "[DEBUG ]"
21ba991379Sopenharmony_ci    __warning = "[WARNING ]"
22ba991379Sopenharmony_ci
23ba991379Sopenharmony_ci    __user = "[USER]"
24ba991379Sopenharmony_ci
25ba991379Sopenharmony_ci    log_file_path = ""
26ba991379Sopenharmony_ci
27ba991379Sopenharmony_ci    def __init__(self):
28ba991379Sopenharmony_ci        pass
29ba991379Sopenharmony_ci
30ba991379Sopenharmony_ci
31ba991379Sopenharmony_ci    def switchFilePath(self, path):
32ba991379Sopenharmony_ci        self.log_file_path = path
33ba991379Sopenharmony_ci        self.printLog("Write detail log to File: %s" % path)
34ba991379Sopenharmony_ci
35ba991379Sopenharmony_ci
36ba991379Sopenharmony_ci    def __printMessage(self, type, msg, log_level='developer'):
37ba991379Sopenharmony_ci        '''
38ba991379Sopenharmony_ci        #====================================================================================
39ba991379Sopenharmony_ci        #   @Method:        __printMessage()
40ba991379Sopenharmony_ci        #   @Precondition:  none
41ba991379Sopenharmony_ci        #   @Func:          print the log
42ba991379Sopenharmony_ci        #   @PostStatus:    none
43ba991379Sopenharmony_ci        #   @Param:         type, log type:info, debug, error or worning
44ba991379Sopenharmony_ci        #   @Param:         msg, log message
45ba991379Sopenharmony_ci        #   @Example:       logger.__printMessage(self.__info, "test")
46ba991379Sopenharmony_ci        #   @Author:        zwx205888
47ba991379Sopenharmony_ci        #   @ModifyRecord:  None
48ba991379Sopenharmony_ci        #====================================================================================
49ba991379Sopenharmony_ci        '''
50ba991379Sopenharmony_ci
51ba991379Sopenharmony_ci        time_str = time_info.get_now_time_str_info()
52ba991379Sopenharmony_ci        filename = "unknow file"
53ba991379Sopenharmony_ci        lineno_str = "unknow line number"
54ba991379Sopenharmony_ci        try:
55ba991379Sopenharmony_ci            f = sys._getframe(2)
56ba991379Sopenharmony_ci            filename = os.path.basename(f.f_code.co_filename)
57ba991379Sopenharmony_ci            lineno_str = str(f.f_lineno)
58ba991379Sopenharmony_ci        except Exception as e:
59ba991379Sopenharmony_ci            print(e)
60ba991379Sopenharmony_ci        log_message = "%s : [%s - %s line: %s - %s]" % (type, time_str, filename, lineno_str, msg)
61ba991379Sopenharmony_ci#         print(log_message)
62ba991379Sopenharmony_ci        self.printIntoLogFile(log_message, log_level)
63ba991379Sopenharmony_ci
64ba991379Sopenharmony_ci    def printIntoLogFile(self, log_message, log_level):
65ba991379Sopenharmony_ci        if log_level == 'user':
66ba991379Sopenharmony_ci            print(log_message)
67ba991379Sopenharmony_ci
68ba991379Sopenharmony_ci        param_file_path, _ = os.path.split(self.log_file_path)
69ba991379Sopenharmony_ci        if not os.path.exists(param_file_path):
70ba991379Sopenharmony_ci            os.makedirs(param_file_path)
71ba991379Sopenharmony_ci        with open(self.log_file_path, 'a', encoding='utf-8') as f:
72ba991379Sopenharmony_ci            f.write(log_message + '\n')
73ba991379Sopenharmony_ci
74ba991379Sopenharmony_ci    def printLog(self, log_message):
75ba991379Sopenharmony_ci        self.__printMessage(self.__info, log_message, 'user')
76ba991379Sopenharmony_ci
77ba991379Sopenharmony_ci    def info(self, msg):
78ba991379Sopenharmony_ci        '''
79ba991379Sopenharmony_ci        #====================================================================================
80ba991379Sopenharmony_ci        #   @Method:        info()
81ba991379Sopenharmony_ci        #   @Precondition:  none
82ba991379Sopenharmony_ci        #   @Func:          print the log of info type
83ba991379Sopenharmony_ci        #   @PostStatus:    none
84ba991379Sopenharmony_ci        #   @Param:         msg, log message
85ba991379Sopenharmony_ci        #   @Example:       logger.info("test")
86ba991379Sopenharmony_ci        #   @Author:        zwx205888
87ba991379Sopenharmony_ci        #   @ModifyRecord:  None
88ba991379Sopenharmony_ci        #====================================================================================
89ba991379Sopenharmony_ci        '''
90ba991379Sopenharmony_ci        self.__printMessage(self.__info, msg)
91ba991379Sopenharmony_ci
92ba991379Sopenharmony_ci    def error(self, msg):
93ba991379Sopenharmony_ci        '''
94ba991379Sopenharmony_ci        #====================================================================================
95ba991379Sopenharmony_ci        #   @Method:        error()
96ba991379Sopenharmony_ci        #   @Precondition:  none
97ba991379Sopenharmony_ci        #   @Func:          print the log of error type
98ba991379Sopenharmony_ci        #   @PostStatus:    none
99ba991379Sopenharmony_ci        #   @Param:         msg, log message
100ba991379Sopenharmony_ci        #   @Example:       logger.error("test")
101ba991379Sopenharmony_ci        #   @Author:        zwx205888
102ba991379Sopenharmony_ci        #   @ModifyRecord:  None
103ba991379Sopenharmony_ci        #====================================================================================
104ba991379Sopenharmony_ci        '''
105ba991379Sopenharmony_ci        self.__printMessage(self.__error, msg)
106ba991379Sopenharmony_ci
107ba991379Sopenharmony_ci    def debug(self, msg):
108ba991379Sopenharmony_ci        '''
109ba991379Sopenharmony_ci        #====================================================================================
110ba991379Sopenharmony_ci        #   @Method:        debug()
111ba991379Sopenharmony_ci        #   @Precondition:  none
112ba991379Sopenharmony_ci        #   @Func:          print the log of debug type
113ba991379Sopenharmony_ci        #   @PostStatus:    none
114ba991379Sopenharmony_ci        #   @Param:         msg, log message
115ba991379Sopenharmony_ci        #   @Example:       logger.debug("test")
116ba991379Sopenharmony_ci        #   @Author:        zwx205888
117ba991379Sopenharmony_ci        #   @ModifyRecord:  None
118ba991379Sopenharmony_ci        #====================================================================================
119ba991379Sopenharmony_ci        '''
120ba991379Sopenharmony_ci
121ba991379Sopenharmony_ci        self.__printMessage(self.__debug, msg)
122ba991379Sopenharmony_ci
123ba991379Sopenharmony_ci    def warning(self, msg):
124ba991379Sopenharmony_ci        '''
125ba991379Sopenharmony_ci        #====================================================================================
126ba991379Sopenharmony_ci        #   @Method:        warning()
127ba991379Sopenharmony_ci        #   @Precondition:  none
128ba991379Sopenharmony_ci        #   @Func:          print the log of warning type
129ba991379Sopenharmony_ci        #   @PostStatus:    none
130ba991379Sopenharmony_ci        #   @Param:         msg, log message
131ba991379Sopenharmony_ci        #   @Example:       logger.warning("test")
132ba991379Sopenharmony_ci        #   @Author:        zwx205888
133ba991379Sopenharmony_ci        #   @ModifyRecord:  None
134ba991379Sopenharmony_ci        #====================================================================================
135ba991379Sopenharmony_ci        '''
136ba991379Sopenharmony_ci
137ba991379Sopenharmony_ci        self.__printMessage(self.__warning, msg)
138ba991379Sopenharmony_ci
139ba991379Sopenharmony_ci'''
140ba991379Sopenharmony_ci#   use logger object
141ba991379Sopenharmony_ci'''
142ba991379Sopenharmony_cilogger = Logger()
143