標籤: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