[英]Python custom logger not printing to console
我正在編寫一個 Python Flask 應用程序,並且只想為我自己的代碼設置日志級別。 如果我將根記錄器設置為 DEBUG,我會收到垃圾郵件,所以我想我會設置我自己的記錄器,我可以為其設置日志級別。
這是在啟動時運行的代碼:
# File: server/__init__.py
import logging
def create_app(config=None):
log = logging.getLogger("api_log")
log.setLevel("DEBUG")
print("Log level: " + logging.getLevelName(log.level)) # Outputs "DEBUG"
log.debug("Does not show")
log.warning("Does show")
出於某種原因,即使將日志級別調整為DEBUG
, log.debug
命令也不會向文件輸出任何內容。
誰能發現我做錯了什么?
編輯#1:在我的情況下,當我添加處理程序log.addHandler(logging.StreamHandler())
時, DEBUG
語句會輸出到控制台。 我不明白為什么我需要創建另一個處理程序來獲得正確的輸出。 它也會弄亂我的測試代碼輸出,但我會針對該問題創建另一篇文章。
Logging HOWTO文檔中的以下兩段解釋了為什么必須設置處理程序:
記錄器有一個有效級別的概念。 如果未在記錄器上明確設置級別,則使用其父級的級別作為其有效級別。 如果父級沒有明確的級別集,則檢查其父級,依此類推 - 搜索所有祖先,直到找到明確設置的級別。 根記錄器始終具有明確的級別集(默認情況下為警告)。 在決定是否處理一個事件時,通過logger的有效級別來決定該事件是否被傳遞給了logger的handler。
子記錄器將消息傳播到與其祖先記錄器關聯的處理程序。 因此,沒有必要為應用程序使用的所有記錄器定義和配置處理程序。 為頂級記錄器配置處理程序並根據需要創建子記錄器就足夠了。 (但是,您可以通過將記錄器的傳播屬性設置為 False 來關閉傳播。)
這里有兩個關鍵點:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.