python日誌模塊--封裝

import logging,time,os,sys

'''
使用方法:在project主目錄下新建lib目錄,將logger_fengzhuang.py文件複製進去

調用方式:
logger = Logger(file_or_terminal="file", level="DEBEG").getLogger()
# logger = Logger(file_or_terminal="terminal").getLogger()
# logger = Logger(file_or_terminal="all").getLogger()
logger.debug("debug")
logger.info("info")
logger.error("info")
    
    # file_or_terminal == terminal: 只打印到命令行
    # file_or_terminal == file: 只打印到日誌文件
    # file_or_terminal == all: 同時打印到日誌文件和命令行
    # level = CRITICAL','ERROR','WARNING','INFO','DEBUG

'''

class Logger():

    def __init__(self, file_or_terminal="file", level="ERROR"):
        self.logger = logging.getLogger()
        self.logger.setLevel(level)
        info = '''
                file_or_terminal == terminal: 只打印到命令行
                file_or_terminal == file: 只打印到日誌文件
                file_or_terminal == all: 同時打印到日誌文件和命令行
                level = CRITICAL','ERROR','WARNING','INFO','DEBUG
            '''
        proDir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        resultPath = os.path.join(proDir, 'result')
        result_Log_Path = os.path.join(resultPath, 'Log')
        result_Html_Path = os.path.join(resultPath, 'HTML報告')
        Log_month_Dir = os.path.join(result_Log_Path, time.strftime("%Y-%m"))
        self.Log_day_log_Path = os.path.join(Log_month_Dir, time.strftime("%Y-%m-%d")+'.log')
        # 創建result文件夾及裏面的日期時間文件夾、創建Log文件夾、創建"HTML報告"文件夾、當天日期命名的log文件夾(若不存在)
        for i in [resultPath, result_Log_Path, result_Html_Path, Log_month_Dir]:
            if not os.path.exists(i):
                os.mkdir(i)
        #
        # print(info)
        time.sleep(0.1)
        self.file_or_terminal = file_or_terminal


    def getLogger(self):
        fm = logging.Formatter(fmt='%(asctime)s %(filename)s[%(lineno)d] %(levelname)s %(message)s %(module)s %(funcName)s', datefmt="%Y-%m-%d %X")
        def only_file():
            fh = logging.FileHandler(os.path.join(self.Log_day_log_Path))
            fh.setFormatter(fm)
            self.logger.addHandler(fh)
            return self.logger

        def only_terminal():
            ch = logging.StreamHandler()
            ch.setFormatter(fm)
            self.logger.addHandler(ch)
            return self.logger

        def file_and_terminal():
            only_file()
            only_terminal()
            return self.logger

        choice_dict = {
            "terminal": only_terminal,
            "file": only_file,
            "all": file_and_terminal,
        }

        if choice_dict.get(self.file_or_terminal):
            return choice_dict.get(self.file_or_terminal)()
        else:
            return choice_dict.get("file")()



if __name__ == '__main__':
    # logger = Logger().getLogger()
    logger = Logger("all").getLogger()
    # logger = Logger("terminal", "INFO").getLogger()
    # logger = Logger("file", "DEBUG").getLogger()
    logger.debug("debug")
    logger.info("info")
    logger.error("info")



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章