在 Python 中記錄到標準輸出 stdout
本教程將介紹在 Python 中將日誌寫入檔案和 stdout 的方法。
使用 Python 中的 logging.basicConfig()
函式登入到 stdout
如果我們想將日誌列印到控制檯視窗並將日誌寫入檔案中,我們可以使用 logging.basicConfig()
函式 來完成此過程。logging.basicConfig()
函式為 Python 中的日誌記錄配置一些基本引數。我們可以使用此函式的 stream
引數來指定我們也希望在控制檯視窗上列印此日誌。其餘配置與使用 logging.basicConfig()
函式將日誌寫入檔案相同。以下程式碼演示了我們如何將日誌寫入控制檯視窗。
import logging
import sys
# Creating and Configuring Logger
Log_Format = "%(levelname)s %(asctime)s - %(message)s"
logging.basicConfig(
filename="logfile.log",
stream=sys.stdout,
filemode="w",
format=Log_Format,
level=logging.ERROR,
)
logger = logging.getLogger()
# Testing our Logger
logger.error("Our First Error Message")
輸出:
2021-06-13 05:15:24,093 - root - ERROR - Our First Error Message
使用 Python 中的 logging.StreamHandler()
函式登入到 stdout
我們還可以使用 logging.StreamHandler()
函式將日誌寫入 Python 中的控制檯視窗。通過將 sys.stdout
傳遞給 logging.StreamHandler()
函式,我們可以建立一個可以將日誌訊息列印到控制檯視窗的流處理程式。然後我們可以使用 addHandler()
函式將此流處理程式新增到我們的記錄器物件。以下程式碼片段向我們展示瞭如何使用 logging.StreamHandler()
函式將日誌訊息列印到控制檯視窗。
import logging
import sys
logger = logging.getLogger()
fileHandler = logging.FileHandler("logfile.log")
streamHandler = logging.StreamHandler(sys.stdout)
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
streamHandler.setFormatter(formatter)
fileHandler.setFormatter(formatter)
logger.addHandler(streamHandler)
logger.addHandler(fileHandler)
logger.error("This is the first error")
輸出:
2021-06-13 05:03:37,510 - root - ERROR - This is the first error
我們在上面的程式碼中使用 logging.FileHandler()
和 logging.StreamHandler()
函式將日誌訊息 This is the first error
寫入檔案 logfile.log
和控制檯視窗。我們首先建立了一個 logger 物件,我們將使用該物件通過 logging.getLogger()
函式編寫日誌。然後,我們建立了一個檔案處理程式 fileHandler
併為其分配了 logging.FileHandler('logfile.log')
。
之後,我們建立了一個流處理程式 streamHandler
,並分配了 logging.StreamHandler(sys.stdout)
。之後,我們建立了一個格式化程式來使用 logging.Formatter()
函式格式化我們的輸出,並使用 setFormatter()
函式為 fileHandler
和 streamHandler
設定格式化程式。在上一步之後,我們使用 addHandler()
函式將兩個新的處理程式新增到我們的記錄器物件中。最後,我們使用 logger.error('This is the first error')
將錯誤訊息寫入我們的檔案和控制檯視窗。
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
LinkedIn