目錄
- 🔞0.引言:
- 1.Logging模塊
- 第一階段——基本使用!
- 1.簡介:
- 2.日志等級:
- 3.formater格式:
- 4.日志等級&format格式模擬使用:
- 5.日志資訊保存為檔案:
- 第二階段——進階版操作!
- 1.logging模塊還提供了模塊化組件的方法——靈活配置日志器:
- 2.模塊化組件使用:
- (1)使用步驟:
- (2)實戰使用一(一個日志記錄器對應一個日志處理器):
- (3)實戰使用二(一個日志記錄器對應多[此處是兩個]個日志處理器):
- 2.In The End!
🔞0.引言:
- 👻👻相信很多初學Python的小伙伴們,在碰到自己辛辛苦苦碼的代碼報錯的時候,你們自己動手解決BUG的方法大多都是——通過加很多的print()函式,一點點縮小范圍,直到找到BUG所在位置并解決之!👻👻
比如:
??下面通過result1到result5模擬小伙伴們辛辛苦苦撰寫的五個函式,結果在最后呼叫實作終極功能的時候它報錯了!
?? 這可怎么辦——還好有print()函式,一個個列印看看到哪列印不正常:
result1 = '第一個函式運行OK'
print(result1)
result2 = '第二個函式運行OK'
print(result2)
result3 = '第三個函式運行不OK'
print(result3)
result4 = '第四個函式運行OK'
print(result4)
result5 = '第五個函式運行OK'
print(result5)
??不可否認,這確實也是一種解決BUG的方法!但是,當你找到BUG所在位置并解決之后,那么多的printf()陳述句你最侄訓要一個個洗掉,是不是很麻煩!

- 😬😬所以,這里就引入了logging模塊,下面我簡單使用一下——咱們看看這個模塊的作用及其偉大之處!(看不懂不要緊,后面正文是詳細講解哦!)😬😬
??我們將上面的所有pirntf()陳述句都改為logging.debug()陳述句,觀察輸出,此時并無任何輸出——也就是目前對我們的程式是沒有任何影響的!
import logging
logging.basicConfig(level=logging.INFO)
result1 = '第一個函式運行OK'
logging.debug(result1)
result2 = '第二個函式運行OK'
logging.debug(result1)
result3 = '第三個函式運行OK'
logging.debug(result1)
result4 = '第四個函式運行OK'
logging.debug(result1)
result5 = '第五個函式運行OK'
logging.debug(result1)

??我們設定日志等級為DEBUG,即將level的值設為logging.DEBUG,再觀察輸出:
import logging
logging.basicConfig(level=logging.DEBUG)
result1 = '第一個函式運行OK'
logging.debug(result1)
result2 = '第二個函式運行OK'
logging.debug(result1)
result3 = '第三個函式運行OK'
logging.debug(result1)
result4 = '第四個函式運行OK'
logging.debug(result1)
result5 = '第五個函式運行OK'
logging.debug(result1)
??會發現,此時就會以DEBUG級別輸出資訊,這樣我們就可以簡單的通過改變日志的等級(僅僅改變一個引數值)來控制是否輸出顯示——以達到查錯的作用,而不再需要反復加刪print()函式來查錯,是不是很方便呢?

3. 🐌🐌我會盡量把技術文寫的通俗易懂/生動有趣,保證每一個想要學習知識&&認認真真讀完本文的讀者們能夠有所獲,有所得,當然,如果你讀完感覺本文寫的還可以,真正學習到了東西,希望給我個「 贊 」 和 「 收藏 」,這個對我很重要,謝謝了!🐌🐌
?
?
| 下面就讓我們一同走入logging模塊的世界!!! |
1.Logging模塊
第一階段——基本使用!
1.簡介:
軟體開發中通過日志記錄程式的運行情況是一個開發的好習慣,對于錯誤排查和系統運維都有很大幫助,Python標準庫自帶日志模塊,程式的日志功能直接呼叫標準庫的日志模塊即可通過日志,開發者可以清楚的了解發生了哪些事件,包括出現了哪些錯誤,
2.日志等級:
?
| 日志等級(level) | 描述 |
|---|---|
| DEBUG | 除錯資訊,通常在診斷問題的時候用 |
| INFO | 普通資訊,確認程式按照預期運行 |
| WARNING | 警告資訊,表示發生意想不到的事,或者指示接下來可能會出現一些問題,但是程式還是繼續運行 |
| ERROR | 錯誤資訊,程式運行中出現了一些問題,程式某些功能不能執行 |
| CRITICAL | 危險資訊,一個嚴重的錯誤,導致程式無法繼續運行 |
logging中級別大小:DEBUG<INFO<WARNING<ERROR<CRITICAL
3.formater格式:

4.日志等級&format格式模擬使用:
import logging
# 設定輸出的格式
LOG_FORMAT = "時間:%(asctime)s - 日志等級:%(levelname)s - 日志資訊:%(message)s"
# 對logger進行配置——日志等級&輸出格式
logging.basicConfig(level=logging.WARNING, format=LOG_FORMAT)
# logging.level(message)創建一條level級別的日志
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")
??觀察可知,確實只有大于等于WARNING日志等級的日志資訊輸出了哦!

??注意:logging.basicConfig()只能有一個哦!如果寫多條——只有第一潭訓生效!!!
5.日志資訊保存為檔案:
??上述使用最終日志資訊都是在終端輸出——電腦一關/程式一關/編輯器一關,日志資訊就丟失了!
??而且我們實際使用中也不會那樣做,所以下面就來來看看如何寫入檔案!

??小提示:還可以通過指定filemode引數的值來指定檔案寫入方式哦!(類比檔案操作中的a,a+等)

第二階段——進階版操作!
| 如果只是簡單的使用logging,那么使用上面介紹的方法就可以了,如果要深度定制logging,那么就需要對它有更深的了解! |
1.logging模塊還提供了模塊化組件的方法——靈活配置日志器:
| 組件 | 說明 |
|---|---|
| Loggers(日志記錄器) | 提供程式直接使用的介面(基操中的logging.basicConfig()就是配置了此組件) |
| Handlers(日志處理器) | 將記錄的日志發送到指定的位置(終端列印/保存為檔案) |
| Filters(日志過濾器) | 用于過濾特定的日志記錄 |
| Formatters(日志格式器) | 用于控制日志資訊的輸出格式 |
??各組件之間的關系如下圖所示:

2.模塊化組件使用:
(1)使用步驟:
- 創建一個logger(日志記錄器)物件;
- 定義handler(日志處理器),決定把日志發到哪里;
常用的是:
??StreamHandler——>輸出到控制臺;
??FileHandler——>輸出到檔案; - 設定日志級別(level)和輸出格式Formatters(日志格式器);
- 把handler添加到對應的logger中去,
(2)實戰使用一(一個日志記錄器對應一個日志處理器):
import logging
# 1.創建一個logger(日志記錄器)物件;
my_logger = logging.Logger("first_logger")
# 2.定義handler(日志處理器),決定把日志發到哪里;
my_handler = logging.FileHandler('test.log')
# 3.設定日志級別(level)和輸出格式Formatters(日志格式器);
my_handler.setLevel(logging.INFO)
my_format = logging.Formatter("時間:%(asctime)s 日志資訊:%(message)s 行號:%(lineno)d")
# 把handler添加到對應的logger中去,
my_handler.setFormatter(my_format)
my_logger.addHandler(my_handler)
# 使用:
my_logger.info("我是日志組件")

(3)實戰使用二(一個日志記錄器對應多[此處是兩個]個日志處理器):
import logging
# 創建一個logger(日志記錄器)物件;
my_logger = logging.Logger("first_logger")
# 第一個日志處理器
my_handler = logging.FileHandler('test.log')
my_handler.setLevel(logging.INFO)
my_format = logging.Formatter("時間:%(asctime)s 日志資訊:%(message)s 行號:%(lineno)d")
my_handler.setFormatter(my_format)
my_logger.addHandler(my_handler)
# 第二個日志處理器
you_handler = logging.StreamHandler()
you_handler.setLevel(logging.DEBUG)
you_format = logging.Formatter("時間:%(asctime)s 日志資訊:%(message)s 行號:%(lineno)d 這是StreamHandler")
you_handler.setFormatter(you_format)
my_logger.addHandler(you_handler)
# 使用:
my_logger.info("我是日志組件")


2.In The End!

| 從現在做起,堅持下去,一天進步一小點,不久的將來,你會感謝曾經努力的你! |
?本博主會持續更新爬蟲基礎分欄及爬蟲實戰分欄,認真仔細看完本文的小伙伴們,可以點贊收藏并評論出你們的讀后感,并可關注本博主,在今后的日子里閱讀更多爬蟲文!
如有錯誤或者言語不恰當的地方可在評論區指出,謝謝!
如轉載此文請聯系我征得本人同意,并標注出處及本博主名,謝謝 !
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/291652.html
標籤:python
