Python練手,封裝日誌模組,v1

來源:互聯網
上載者:User

標籤:for   ace   輸出   覆蓋   min   evel   ips   pre   level   

代碼:Python3

# -*- coding: utf-8 -*-'''    --封裝了logging模組,僅保留關鍵設定,美化了輸出格式'''import sys,random,time import logging as lgdef getRandomInt(digits):    '''    @args:         int digits    @returns:         string    '''    return random.randint(1,10**digits-1).__str__().zfill(digits) def getNowDate(fmt):    '''    @args:         string fmt    @returns:         string    '''    return time.strftime(fmt,time.localtime()).__str__()def getOriginPath():    '''    @returns:         string    '''    return sys.argv[0]class XLogger():        '''    -日誌記錄器 -封裝了logging模組,捨棄了繁瑣了設定,僅保留關鍵設定,美化了輸出格式    -大概用法:-建立XLogger,添加XHandler                -對於XLogger                    -允許設定記錄層級、記錄器名稱、父子記錄器的傳播功能                -對於XStreamHandler 控制台輸出                    -不允許設定                -對於XFileHandler 檔案輸出                    -允許設定檔案路徑,檔案寫入方式:覆蓋/追加    '''        levelMap = {'DEBUG':lg.DEBUG,                'INFO':lg.INFO,                'WARN':lg.WARNING,                'ERROR':lg.ERROR,                'CRITICAL':lg.CRITICAL}        def __init__(self):        self.logger    = None        self.handlers  = []        self.name      = 'root'        self.level     = 'INFO'        self.propagate = False            def setName(self,name):        '''        @args:             string name 關於記錄器-記錄器名稱(預設:root)(名稱可體現記錄器的父子關係)        @returns:             self        '''        self.name = name        return self        def setLevel(self,level):        '''        @args:             string level 關於記錄器-記錄層級 DEBUG/INFO/WARN/ERROR/CRITICAL(預設:INFO)        @returns:             self        '''        self.level = level        return self        def setPropagate(self,propagate):        '''        @args:             boolean propagate 關於記錄器-是否開啟父子日誌記錄器的向上傳播功能(預設:False)                              - 若開啟,子記錄器會獲得父記錄器的全部Handler,                              - 需注意重複添加Handler以免產生重複日誌        @returns:             self        '''        self.propagate = propagate        return self        def addHandler(self,xHandler):        self.handlers.append(xHandler)        return self        def instantiate(self):        '''        @returns:             self        '''        #Logger        self.logger = lg.getLogger(self.name)        self.logger.setLevel(XLogger.levelMap.get(self.level))        self.logger.propagate = self.propagate        #Handler        for handler in self.handlers :            self.logger.addHandler(handler.handler)        return self        def debug(self,layer,message):        self.logger.debug('DBUG ' + '|··' * layer +message)            def info(self,layer,message):        self.logger.info('INFO ' + '|··' * layer + message)              def warning(self,layer,message):        self.logger.warning('WARN ' + '|··' * layer + message)              def error(self,layer,message):        self.logger.error('ERRO ' + '|··' * layer + message)        def critical(self,layer,message):        self.logger.critical('CRIT ' + '|··' * layer + message)    class XHandler:        def __init__(self):            self.handler = None            self.formatter = lg.Formatter('[%(name)s] %(asctime)s %(message)s','%y/%m/%d %H:%M:%S')        class XFileHandler(XHandler):                def __init__(self):            XLogger.XHandler.__init__(self)            self.file = getOriginPath()+'.'+getNowDate("%Y%m%d%H%M%S")+getRandomInt(4)+'XLOG'            self.model = 'w'                def setFile(self,file):            '''            @args:                 string file 關於檔案列印-檔案路徑(預設:起源執行檔案.時間+隨機數+XLOG)            @returns:                 self            '''            self.file = file            return self                def setModel(self,model):            '''            @args:                 string model 關於檔案列印-檔案寫入模式 w覆蓋 a追加(預設:w)            @returns:                 self            '''            self.model = model            return self                def instantiate(self):            '''            @returns:                 self            '''            self.handler = lg.FileHandler(self.file,mode=self.model.lower(),encoding='UTF-8',delay=False)            self.handler.setFormatter(self.formatter)            print('xlog file:',self.file)            return self                class XStreamHandler(XHandler):                def __init__(self):            XLogger.XHandler.__init__(self)                def instantiate(self):            '''            @returns:                 self            '''            self.handler = lg.StreamHandler()            self.handler.setFormatter(self.formatter)            return self

測試:

dir_='D:\\Users\\ex-hexuwen001\\Desktop\\Work\M1-APPS\\using__apps_data\\eclipse_workspace\\myPython\\src'file1=dir_+'\\1.xlog'file2=dir_+'\\2.xlog'logger1 = XLogger().setLevel('DEBUG').setPropagate(True).setName('aaaa')            .addHandler(XLogger.XFileHandler().setFile(file1).setModel('a').instantiate())            .addHandler(XLogger.XStreamHandler().instantiate())            .instantiate()            logger1.debug(0,"牛逼區域網路")logger1.info(1,'廣東省')logger1.warning(2,'肇慶市')logger1.error(2,'高要市')logger1.critical(3,'牛逼鎮')logger2 = XLogger().setLevel('DEBUG').setPropagate(True).setName('aaaa.bbbb')            .addHandler(XLogger.XFileHandler().setFile(file2).setModel('a').instantiate())            .addHandler(XLogger.XStreamHandler().instantiate())            .instantiate()            logger2.debug(0,"牛逼區域網路")logger2.info(1,'廣東省')logger2.warning(2,'肇慶市')logger2.error(2,'高要市')logger2.critical(3,'牛逼鎮')

輸出:

xlog file: D:\Users\ex-hexuwen001\Desktop\Work\M1-APPS\using__apps_data\eclipse_workspace\myPython\src\1.xlog[aaaa] 18/01/12 14:14:23 DBUG 牛逼區域網路[aaaa] 18/01/12 14:14:23 INFO |··廣東省[aaaa] 18/01/12 14:14:23 WARN |··|··肇慶市[aaaa] 18/01/12 14:14:23 ERRO |··|··高要市[aaaa] 18/01/12 14:14:23 CRIT |··|··|··牛逼鎮xlog file: D:\Users\ex-hexuwen001\Desktop\Work\M1-APPS\using__apps_data\eclipse_workspace\myPython\src\2.xlog[aaaa.bbbb] 18/01/12 14:14:23 DBUG 牛逼區域網路[aaaa.bbbb] 18/01/12 14:14:23 DBUG 牛逼區域網路[aaaa.bbbb] 18/01/12 14:14:23 INFO |··廣東省[aaaa.bbbb] 18/01/12 14:14:23 INFO |··廣東省[aaaa.bbbb] 18/01/12 14:14:23 WARN |··|··肇慶市[aaaa.bbbb] 18/01/12 14:14:23 WARN |··|··肇慶市[aaaa.bbbb] 18/01/12 14:14:23 ERRO |··|··高要市[aaaa.bbbb] 18/01/12 14:14:23 ERRO |··|··高要市[aaaa.bbbb] 18/01/12 14:14:23 CRIT |··|··|··牛逼鎮[aaaa.bbbb] 18/01/12 14:14:23 CRIT |··|··|··牛逼鎮


Python練手,封裝日誌模組,v1

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.