# logging模塊 # 日誌模塊 # 日誌 # 日誌用來記錄用戶行爲的,有沒有錯都要記錄下來 # 或者記錄代碼的執行過程的時候,咱們須要記錄下來 # 排錯的時候須要打印不少細節來幫助咱們排錯時,咱們須要記錄下來 # 嚴重的錯誤應該記錄下來 # 在logging模塊中有5個級別, 默認只輸出info以上的級別不包括info級別 # import logging # logging.debug('debug message') # 低級別 排錯信息 # logging.info('info message') # 正常的信息 # logging.warning('warning message') # 警告嘻嘻 # logging.error('error message') # 錯誤信息 # logging.critical('critical message') # 高級別 # 嚴重錯誤信息 # 能夠經過配置的方式使logging日誌輸出的信息更好看 # 兩種配置日誌的方式 # basicconfig 用法簡單,能作的事情相對少 # 缺點 # 記錄到日誌文件中時,解決不了中文的亂碼問題 # 不能同時往文件和屏幕上輸出 # 配置log對象 用戶比較複雜,能作的事情相對多 # 配置日誌logging, level=loggin.DEBUG,配置debug級別以上的信息都輸出。 NOTSET = 0爲最低 # format,格式化,asctime 是時間,對應datefmt。 filename是文件名字,對應filename。lineo是多少行。levelname是等級。message是信息內容 # # import logging # print('%(key)s' % {'key' : 'value'}) # value # logging.basicConfig(level = logging.DEBUG, # format = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', # datefmt = '%a, %d %b %Y %H:%M:%S', # filename = 'test.log', # filemode = 'a') # # logging.debug('debug message') # 低級別 排錯信息 # logging.info('info message') # 正常的信息 # logging.warning('warning message') # 警告嘻嘻 # logging.error('error message') # 錯誤信息 # logging.critical('critical message') # 高級別,基於操做系統級別的信息了 # 嚴重錯誤信息 # # # 例,輸入值錯誤,異常處理後,將錯誤輸出到日誌中 # try: # int(input('num >>>')) # except ValueError: # logging.error('input ValueError') # basicConfig缺點 # 記錄到日誌文件中時,解決不了中文的亂碼問題 # 不能同時往文件和屏幕上輸出 # 因此通常不用logging中的basicConfig來記錄日誌 # 此種日誌爲靈活,充分解耦,比較經常使用 import logging logger = logging.getLogger() # 建立一個logger對象 # 建立一個handler,用於寫入日誌文件 fh = logging.FileHandler('test2.log', encoding='utf-8') # 建立一個文件描述符 # 再建立一個handler,用於輸出到控制檯 ch = logging.StreamHandler() # 在建立一個控制檯的文件秒速福 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s[line:%(lineno)d] -%(message)s') # 設置輸出格式化的格式 #formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', # datefmt = '%a, %d %b %Y %H:%M:%S') fh.setLevel(logging.DEBUG) # 設置輸出等級 # 文件操做符和格式關聯 fh.setFormatter(formatter) # 設置日誌文件(文件描述符)爲該格式輸出 ch.setFormatter(formatter) # 設置控制檯(文件描述符)爲該格式輸出 # logger對象和文件操做符關聯綁定 logger.addHandler(fh) # logger對象能夠添加多個fh和ch對象 將日誌操做符綁定到logger中 logger.addHandler(ch) # 將控制檯操做符綁定到logger中 logger.debug('logger debug message') logger.info('logger info message') logger.warning('logger warning message') logger.error('logger error message') logger.critical('logger critical message') # 例,輸入值錯誤,異常處理後,將錯誤輸出到日誌中 try: int(input('num >>>')) except ValueError: logger.error('input ValueError') # zabbix 比較好的監控系統
logging 類spa
class Logger(object): level_relations = { 'debug':logging.DEBUG, 'info':logging.INFO, 'warning':logging.WARNING, 'error':logging.ERROR, 'crit':logging.CRITICAL }#日誌級別關係映射 def __init__(self, filename, level='info', when='D', backCount=3, fmt='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'): self.logger = logging.getLogger(filename) format_str = logging.Formatter(fmt)#設置日誌格式 self.logger.setLevel(self.level_relations.get(level))#設置日誌級別 sh = logging.StreamHandler()#往屏幕上輸出 sh.setFormatter(format_str) #設置屏幕上顯示的格式 th = handlers.TimedRotatingFileHandler(filename=filename,when=when,backupCount=backCount,encoding='utf-8')#往文件裏寫入#指定間隔時間自動生成文件的處理器 #實例化TimedRotatingFileHandler #interval是時間間隔,backupCount是備份文件的個數,若是超過這個個數,就會自動刪除,when是間隔的時間單位,單位有如下幾種: # S 秒 # M 分 # H 小時、 # D 天、 # W 每星期(interval==0時表明星期一) # midnight 天天凌晨 th.setFormatter(format_str)#設置文件裏寫入的格式 self.logger.addHandler(sh) #把對象加到logger裏 self.logger.addHandler(th) logfilename = 'NBT100_' + time.strftime('%Y-%m-%d') + '.log' log = Logger(logfilename, level='debug') log.logger.info('[%s]收到灃泰FTM13不帶閥命令1:' % time.strftime('%Y-%m-%d %H:%M:%S'))