Python中使用 logging 和 traceback 模塊記錄日誌和跟蹤異常

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+'))

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