Python中使用Logging模塊進行調試和日誌記錄

在學習資料滿天飛的大環境下,知識變得非常零散,體系化的知識並不多,這就導致很多人每天都努力學習到感動自己,最終卻收效甚微,甚至放棄學習。我的使命就是過濾掉大量的垃圾信息,將知識體系化,以短平快的方式直達問題本質,把大家從大海撈針的痛苦中解脫出來。

1 使用原因

使用Logging模塊相較於print的優勢如下:

(1) 可以記錄文件並且同時打印控制檯。

(2) 可以使用5種打印等級:critical、error、warning、info、debug。

(3) 方便統一格式,比如打印時間戳、文件名、代碼行、打印等級等。

(4) Logging模塊自身已經實現單例模式,而且禁止二次打開,安全性更高。


2 使用方法

2.1 源碼

閒言少絮,先上源碼。

# -*- coding: utf-8 -*-
# ~ #----------------------------------------------------------------------
# file name: path.py
# function: define log output format etc. with logging module
# author: albert
# data: 2020/07/05

############################################################################
# 包含外部模塊
#
import sys
import os
import logging

############################################################################
# 功能實現
#
# creat file path
curFileDir = os.path.dirname(__file__) #獲取當前類所在文件路徑
fileDir = os.path.abspath(os.path.join(curFileDir,"../")) #相對路徑轉絕對路徑
sys.path.append(curFileDir) #添加本文件夾路徑到系統路徑

# config parameters
log_name = fileDir + "/my_log.log"
log_level = logging.DEBUG
log_format = " [%(asctime)s - %(filename)s(%(lineno)s) -  %(levelname)s] - %(message)s"

# config console
console_handler = logging.StreamHandler(sys.stderr)
console_handler.setLevel(log_level)
console_handler.setFormatter(logging.Formatter(log_format))
# config log file
file_handler = logging.FileHandler(log_name)
file_handler.setLevel(log_level)
file_handler.setFormatter(logging.Formatter(log_format))
# create log object
log = logging.getLogger("mylogger")
log.setLevel(log_level)
log.addHandler(console_handler)
log.addHandler(file_handler)

############################################################################
# 調試代碼
#
if __name__ == "__main__":
	log.error("hello world ")
	log.error("hello %d world " % 3)
	log.debug("hello {} world {}".format((1,3,4), "hello %d times" % 3))

2.2 說明

(1)上述源碼封裝到一個.py文件中,被其他.py文件import之後就可以仿照調試代碼那樣使用。

(2)上述源碼實現了下述功能:

  • 輸出內容既可以打印到控制檯,又可以輸出到log文件。

  • 輸出格式中包括運行時間、文件名、代碼行號、打印等級和用戶輸出內容。

  • 源碼中log_level使用了三次,其實三個地方可以使用不同級別,自己可以嘗試。


    <完>

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