二十八、深入淺出Python中的 logging模塊

@Author: Runsen

logging模塊是Python內置的標準模塊,主要用於輸出腳本運行日誌,可以設置輸出日誌的等級、日誌保存路徑等。

@[toc]

日誌

日誌是一種可以追蹤某些軟件運行時所發生事件的方法。

軟件開發人員可以向他們的代碼中調用日誌記錄相關的方法來表明發生了某些事情。一個事件可以用一個可包含可選變量數據的消息來描述。此外,事件也有重要性的概念,這個重要性也可以被稱為嚴重性級(level)。

五個級別

其中Logging一共有五種級別,依次是DEBUG < INFO < WARNING < ERROR < CRITICAL

# @Author:Runsen
#引入了 logging 模塊
import logging
LOG_FORMAT = "%(asctime)s----%(name)s----%(levelname)s----%(message)s"
#level 配置為 WARNING 信息,即只輸出 WARNING 級別及其以上的信息,
# format指定了 format 格式的字符串,包括asctime運行時間 name模塊名稱、levelname(日誌級別)message (日誌內容)
logging.basicConfig(level=logging.WARNING,format=LOG_FORMAT)
logging.debug("This is a debug log")
logging.info("This is a info log")
logging.warning("This is a warning log")
logging.error("This is a error log")
logging.critical("This is a critical log")

具體輸出如下。

2020-10-31 12:15:13,181----WARNING----This is a warning log
2020-10-31 12:15:13,181----ERROR----This is a error log
2020-10-31 12:15:13,182----CRITICAL----This is a critical log

為什麼DEBUGINFO的信息沒有輸出?

因為我們在全局配置的時候設置了輸出為 WARNING 級別,所以 DEBUGINFO 級別的信息就被過濾掉了。

日誌信息的輸出格式

basicConfigformat參數指定日誌信息的輸出格式。

logging模塊

logging模塊是Python內置的標準模塊,主要用於輸出運行日誌,可以設置輸出日誌的等級、日誌保存路徑、日誌文件和回滾等;
可以說,logging模塊主要由4部分組成,分別是LoggerHandlerFiltersFormatter

模塊化組件使用

模塊化組件使用流程:

  • 創建一個logger(日誌處理器)對象
  • 定義handler(日誌處理器),決定把日誌發到哪裡。常用的有StreamHandler,輸出到控制台。FileHandler輸出到文件。
  • 設置日誌級別(level)和輸出格式Formatters(日誌格式器)
  • 把handler添加到對應的logger中去
  • 日誌輸出

具體示例代碼如下:

'''
@Author:Runsen
@Wechat:RunsenLiu
'''
'''
@Author:Runsen
@Wechat:RunsenL
'''
import os
import time
import logging
# 第一步、創建一個logger(日誌處理器)對象
logger = logging.getLogger("%s_log" % __name__)
logger.setLevel(logging.INFO)
# 第三步、定義handler(日誌處理器),決定把日誌發到哪裡。這裡設置FileHandler輸出到文件。
rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
# 在當前路徑下新建logs文件夾
if os.path.exists("Logs"):
    pass
else:
    os.mkdir("Logs")
log_name = "./Logs/"+ rq + '.log'
print(log_name)
# a模式追加
handler = logging.FileHandler(log_name, mode='w')
handler.setLevel(logging.WARNING)
# 第三步、設置日誌級別(level)和輸出格式Formatters(日誌格式器)
formatter = logging.Formatter("%(asctime)s----%(filename)s----[line:%(lineno)d]----%(levelname)s:%(message)s")
handler.setFormatter(formatter)
# 第四步、把handler添加到對應的logger中去
logger.addHandler(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')

具體的Logs文件夾中Log文件內容如下。

本文已收錄 GitHub,傳送門~ ,裏面更有大廠面試完整考點,歡迎 Star。

Tags: