『居善地』接口測試 — 日誌保存到文件中

1、把日誌信息保存到文件中

"""
logging模塊是Python的內置模塊,不需要安裝。

步驟:
1,創建一個把日誌信息保存到文件中的處理器FileHandler
2,把文件處理器添加到logger中
3,把格式器傳入到文件處理器中
"""
# 導入logging模塊
import logging

# 創建一個日誌器,就是一個logger對象
logger = logging.getLogger('logger')

# 設置logger輸入級別
logger.setLevel(logging.DEBUG)

# 創建日誌格式器
formator = logging.Formatter(fmt="%(asctime)s [ %(filename)s ]  %(lineno)d行 | [ %(levelname)s ] | [%(message)s]",
                             datefmt="%Y/%m/%d/%X")

# 創建一個輸出的處理器,讓它輸入到控制檯
sh = logging.StreamHandler()

# 1.創建一個把日誌信息存儲到文件中的處理器
# 要加編碼,不然後可能會亂碼
fh = logging.FileHandler("../log/test_log_01.log", encoding="utf-8")

# 把輸出處理器添加到日誌器中
logger.addHandler(sh)

# 給處理器添加格式器
sh.setFormatter(formator)

# 2.把文件處理器,加載到logger中
logger.addHandler(fh)

# 3.給文件處理器添加格式器
fh.setFormatter(formator)

# 輸出日誌信息
logger.debug('輸出debug級別的日誌')
logger.info('輸出info級別的日誌')
logger.warning('輸出warning級別的日誌')
logger.error('輸出error級別的日誌')
logger.critical('輸出critical級別的日誌')

2、拓展

(1)觀察代碼

看下面一段代碼說明問題

# 主要看標號1,2,3

# 導入logging模塊
import logging

# 創建一個日誌器,就是一個logger對象
logger = logging.getLogger('logger')

# 1.設置logger日誌器的日誌級別爲DEBUG
logger.setLevel(logging.ERROR)

# 定義日誌處理器File_handler
File_handler = logging.FileHandler('../log/all.log', encoding="utf-8")

# 2.給日誌處理器File_handler設置日誌級別
File_handler.setLevel(logging.WARNING)

# 給處理器傳入格式器
File_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))

# 定義日誌處理器console_handler
console_handler = logging.StreamHandler()

# 3.設置處理器日誌級別
console_handler.setLevel(logging.DEBUG)

# 給處理器傳入格式器
console_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(filename)s[:%(lineno)d] - %(message)s"))

# 把兩個處理器添加到日誌器中
logger.addHandler(File_handler)
logger.addHandler(console_handler)

logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')

運行結果:

log文件中日誌:

2021-01-16 23:17:14,149 - ERROR - demo_log3.py[:33] - error message
2021-01-16 23:17:14,150 - CRITICAL - demo_log3.py[:34] - critical message

控制檯中的日誌:

2021-01-16 23:17:14,149 - ERROR - error message
2021-01-16 23:17:14,150 - CRITICAL - critical message

(2)提出問題

在上面代碼中

  • logger日誌器設置的日誌級別是ERROR。

    logger.setLevel(logging.ERROR)

  • 文件日誌處理器File_handler設置的日誌級別是WARNING。

    File_handler.setLevel(logging.WARNING)

  • 控制檯日誌處理器console_handler設置的日誌級別是DEBUG。

    console_handler.setLevel(logging.DEBUG)

那麼產生疑問:

  • 已經對日誌器設置了輸出級別,爲什麼還要對日誌處理器的日誌最低輸出級別進行設置呢?
  • 日誌器(logger)和日誌處理器(handler)中設置的日誌輸出級別,誰的優先級更高?

(3)問題說明

  1. 無論是logger實例還是handler實例,它們都可以設置日誌的最低輸出級別。

  2. logger日誌器設置的日誌輸出等級優先級更高,其內部的處理器就不會接收到低於該級別的日誌信息。

    如上面的示例,logger日誌器設置的輸出級別爲ERROR,那麼File_handler和console_handler只能接收到ERROR和以上級別的日誌信息。

    所以看上面示例的結果可以看出,File_handler和console_handler處理器都只輸出了ERROR級別以上的日誌

    因此在設置各handler實例輸出級別時需要小心謹慎。

  3. 在實際的應用工作應用過程中,可以在日誌器(logger)和日誌處理器(handler)中設置不同的日誌級別,相互配合,實現按業務需求過濾日誌。

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