logging模塊
logging模塊用於輸出運行日誌,可以設置不同的日誌等級,保存信息到日誌文件中等。 相比print,logging可以設置日誌的等級,控制在發佈版本中的輸出內容,並且可以指定日誌的輸出格式。
1. 使用logging在終端輸出日誌
#!/usr/bin/env Python # -*- coding:utf-8 -*- import logging # 引入logging模塊 # 設置打印日誌級別 CRITICAL > ERROR > WARNING > INFO > DEBUG logging.basicConfig(level = logging.DEBUG,format = '%(asctime)s - %(name)s -%(filename)s[line:%(lineno)d] - %(levelname)s - %(message)s') # 將信息打印到控制檯上 logging.debug(u"調試") logging.info(u"執行打印功能") logging.warning(u"警告") logging.error(u"錯誤") logging.critical(u"致命錯誤")
輸出如下:
2019-05-13 00:42:13,584 - root -www.linuxidc.com.py[line:7] - DEBUG - 調試
2019-05-13 00:42:13,589 - root -www.linuxidc.com.py[line:8] - INFO - 執行打印功能
2019-05-13 00:42:13,590 - root -www.linuxidc.com.py[line:9] - WARNING - 警告
2019-05-13 00:42:13,590 - root -www.linuxidc.com.py[line:10] - ERROR - 錯誤
2019-05-13 00:42:13,590 - root -www.linuxidc.com.py[line:11] - CRITICAL - 致命錯誤
2. 使用logging在終端輸出日誌,並保存日誌到本地log文件
#!/usr/bin/env python # -*- coding:utf-8 -*- import logging # 引入logging模塊 import os.path # 第一步,創建一個logger logger = logging.getLogger() logger.setLevel(logging.DEBUG) # Log等級開關 # 第二步,創建一個handler,用於寫入日誌文件 log_path = os.path.dirname(os.getcwd()) + '/Logs/' log_name = log_path + 'log.log' logfile = log_name file_handler = logging.FileHandler(logfile, mode='a+') file_handler.setLevel(logging.ERROR) # 輸出到file的log等級的開關 # 第三步,定義handler的輸出格式 formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s") file_handler.setFormatter(formatter) # 第四步,將handler添加到logger裏面 logger.addHandler(file_handler) # 如果需要同時需要在終端上輸出,定義一個streamHandler print_handler = logging.StreamHandler() # 往屏幕上輸出 print_handler.setFormatter(formatter) # 設置屏幕上顯示的格式 logger.addHandler(print_handler) # 日誌信息 logger.debug('this is a logger debug message') logger.info('this is a logger info message') logger.warning('this is a logger warning message') logger.error('this is a logger error message') logger.critical('this is a logger critical message') # 或使用logging logging.debug('this is a logger debug message') logging.info('this is a logger info message') logging.warning('this is a logger warning message') logging.error('this is a logger error message') logging.critical('this is a logger critical message')
日誌等級劃分
FATAL:致命錯誤
CRITICAL:特別糟糕的事情,如內存耗盡、磁盤空間爲空,一般很少使用
ERROR:發生錯誤時,如IO操作失敗或者連接問題
WARNING:發生很重要的事件,但是並不是錯誤時,如用戶登錄密碼錯誤
INFO:處理請求或者狀態變化等日常事務
DEBUG:調試過程中使用DEBUG等級,如算法中每個循環的中間狀態
traceback模塊
traceback是python中用來跟蹤異常信息的模塊,方便把程序中的運行異常打印或者保存下來做異常分析。
常見用法
try:
doSomething()
except:
traceback.print_exc()
# logging.error(str(traceback.format_exc()))
traceback.format_exc() 與 traceback.print_exc() 區別:
traceback.format_exc() 返回異常信息的字符串,可以用來把信息記錄到log裏;
traceback.print_exc() 直接把異常信息在終端打印出來;
traceback.print_exc() 也可以實現把異常信息寫入文件,使用方法:
traceback.print_exc(file=open('traceback_INFO.txt','w+'))