
- Python 基礎
- Python - 首頁
- Python - 概述
- Python - 歷史
- Python - 特性
- Python vs C++
- Python - Hello World 程式
- Python - 應用領域
- Python - 直譯器
- Python - 環境設定
- Python - 虛擬環境
- Python - 基本語法
- Python - 變數
- Python - 資料型別
- Python - 型別轉換
- Python - Unicode 系統
- Python - 字面量
- Python - 運算子
- Python - 算術運算子
- Python - 比較運算子
- Python - 賦值運算子
- Python - 邏輯運算子
- Python - 位運算子
- Python - 成員運算子
- Python - 身份運算子
- Python - 運算子優先順序
- Python - 註釋
- Python - 使用者輸入
- Python - 數字
- Python - 布林值
- Python 控制語句
- Python - 控制流
- Python - 決策
- Python - If 語句
- Python - If else
- Python - 巢狀 If
- Python - Match-Case 語句
- Python - 迴圈
- Python - for 迴圈
- Python - for-else 迴圈
- Python - While 迴圈
- Python - break 語句
- Python - continue 語句
- Python - pass 語句
- Python - 巢狀迴圈
- Python 函式 & 模組
- Python - 函式
- Python - 預設引數
- Python - 關鍵字引數
- Python - 僅關鍵字引數
- Python - 位置引數
- Python - 僅位置引數
- Python - 可變引數
- Python - 變數作用域
- Python - 函式註解
- Python - 模組
- Python - 內建函式
- Python 字串
- Python - 字串
- Python - 字串切片
- Python - 修改字串
- Python - 字串連線
- Python - 字串格式化
- Python - 跳脫字元
- Python - 字串方法
- Python - 字串練習
- Python 列表
- Python - 列表
- Python - 訪問列表項
- Python - 修改列表項
- Python - 新增列表項
- Python - 刪除列表項
- Python - 迴圈遍歷列表
- Python - 列表推導式
- Python - 排序列表
- Python - 複製列表
- Python - 合併列表
- Python - 列表方法
- Python - 列表練習
- Python 元組
- Python - 元組
- Python - 訪問元組項
- Python - 更新元組
- Python - 解包元組
- Python - 迴圈遍歷元組
- Python - 合併元組
- Python - 元組方法
- Python - 元組練習
- Python 集合
- Python - 集合
- Python - 訪問集合項
- Python - 新增集合項
- Python - 刪除集合項
- Python - 迴圈遍歷集合
- Python - 合併集合
- Python - 複製集合
- Python - 集合運算子
- Python - 集合方法
- Python - 集合練習
- Python 字典
- Python - 字典
- Python - 訪問字典項
- Python - 修改字典項
- Python - 新增字典項
- Python - 刪除字典項
- Python - 字典檢視物件
- Python - 迴圈遍歷字典
- Python - 複製字典
- Python - 巢狀字典
- Python - 字典方法
- Python - 字典練習
- Python 陣列
- Python - 陣列
- Python - 訪問陣列項
- Python - 新增陣列項
- Python - 刪除陣列項
- Python - 迴圈遍歷陣列
- Python - 複製陣列
- Python - 反轉陣列
- Python - 排序陣列
- Python - 合併陣列
- Python - 陣列方法
- Python - 陣列練習
- Python 檔案處理
- Python - 檔案處理
- Python - 寫入檔案
- Python - 讀取檔案
- Python - 重新命名和刪除檔案
- Python - 目錄
- Python - 檔案方法
- Python - OS 檔案/目錄方法
- Python - OS 路徑方法
- 面向物件程式設計
- Python - OOPs 概念
- Python - 類 & 物件
- Python - 類屬性
- Python - 類方法
- Python - 靜態方法
- Python - 建構函式
- Python - 訪問修飾符
- Python - 繼承
- Python - 多型
- Python - 方法重寫
- Python - 方法過載
- Python - 動態繫結
- Python - 動態型別
- Python - 抽象
- Python - 封裝
- Python - 介面
- Python - 包
- Python - 內部類
- Python - 匿名類和物件
- Python - 單例類
- Python - 包裝器類
- Python - 列舉
- Python - 反射
- Python 錯誤 & 異常
- Python - 語法錯誤
- Python - 異常
- Python - try-except 塊
- Python - try-finally 塊
- Python - 丟擲異常
- Python - 異常鏈
- Python - 巢狀 try 塊
- Python - 使用者自定義異常
- Python - 日誌記錄
- Python - 斷言
- Python - 內建異常
- Python 多執行緒
- Python - 多執行緒
- Python - 執行緒生命週期
- Python - 建立執行緒
- Python - 啟動執行緒
- Python - 執行緒連線
- Python - 執行緒命名
- Python - 執行緒排程
- Python - 執行緒池
- Python - 主執行緒
- Python - 執行緒優先順序
- Python - 守護執行緒
- Python - 執行緒同步
- Python 同步
- Python - 執行緒間通訊
- Python - 執行緒死鎖
- Python - 中斷執行緒
- Python 網路程式設計
- Python - 網路程式設計
- Python - 套接字程式設計
- Python - URL 處理
- Python - 泛型
- Python 庫
- NumPy 教程
- Pandas 教程
- SciPy 教程
- Matplotlib 教程
- Django 教程
- OpenCV 教程
- Python 雜項
- Python - 日期 & 時間
- Python - 數學
- Python - 迭代器
- Python - 生成器
- Python - 閉包
- Python - 裝飾器
- Python - 遞迴
- Python - 正則表示式
- Python - PIP
- Python - 資料庫訪問
- Python - 弱引用
- Python - 序列化
- Python - 模板
- Python - 輸出格式化
- Python - 效能測量
- Python - 資料壓縮
- Python - CGI 程式設計
- Python - XML 處理
- Python - GUI 程式設計
- Python - 命令列引數
- Python - 文件字串
- Python - JSON
- Python - 傳送郵件
- Python - 擴充套件
- Python - 工具/實用程式
- Python - GUIs
- Python 高階概念
- Python - 抽象基類
- Python - 自定義異常
- Python - 高階函式
- Python - 物件內部
- Python - 記憶體管理
- Python - 元類
- Python - 使用元類進行超程式設計
- Python - 模擬和存根
- Python - 猴子補丁
- Python - 訊號處理
- Python - 型別提示
- Python - 自動化教程
- Python - Humanize 包
- Python - 上下文管理器
- Python - 協程
- Python - 描述符
- Python - 診斷和修復記憶體洩漏
- Python - 不可變資料結構
- Python 有用資源
- Python - 問答
- Python - 線上測驗
- Python - 快速指南
- Python - 參考
- Python - 速查表
- Python - 專案
- Python - 有用資源
- Python - 討論
- Python 編譯器
- NumPy 編譯器
- Matplotlib 編譯器
- SciPy 編譯器
Python - 日誌記錄
Python 中的日誌記錄
日誌記錄是在程式執行期間記錄訊息的過程,以提供執行時資訊,這些資訊可用於監控、除錯和審計。
在 Python 中,日誌記錄是透過內建的 logging 模組實現的,該模組提供了一個靈活的框架來生成日誌訊息。
日誌記錄的優勢
以下是使用 Python 日誌記錄的優勢 −
除錯 − 透過在程式執行期間捕獲相關資訊來幫助識別和診斷問題。
監控 − 提供對應用程式行為和效能的洞察。
審計 − 為安全目的保留重要事件和操作的記錄。
故障排除 − 促進跟蹤程式流程和變數值以瞭解意外行為。
Python 日誌記錄的元件
Python 日誌記錄包含幾個關鍵元件,這些元件協同工作以有效地管理和輸出日誌訊息 −
日誌器 − 它是您用來發出日誌訊息的主要入口點。每個日誌器例項都有名稱,並且可以獨立配置。
處理器 − 它確定日誌訊息傳送到的位置。處理器將日誌訊息傳送到不同的目標,例如控制檯、檔案、套接字等。
格式化器 − 它指定日誌訊息的佈局。格式化器透過指定要包含哪些資訊(例如,時間戳、日誌級別、訊息)來定義日誌記錄的結構。
日誌級別 − 它定義日誌訊息的嚴重性級別。低於此級別的訊息將被忽略。常見的級別包括 DEBUG、INFO、WARNING、ERROR 和 CRITICAL。
過濾器 − 它是可選元件,可提供更精細的控制,以控制處理器處理和發出的日誌記錄。
日誌級別
Python 中的日誌級別定義了日誌訊息的嚴重性,允許開發人員根據其重要性對訊息進行分類和過濾。每個日誌級別都有特定的用途,並有助於理解已記錄資訊的意義 −
DEBUG − 詳細的資訊,通常僅對除錯目的有用。這些訊息用於跟蹤程式的流程,通常不會在生產環境中看到。
INFO − 確認事情按預期工作。這些訊息提供有關應用程式進度的一般資訊。
WARNING − 指示可能存在的問題,這些問題不會阻止程式執行,但可能需要關注。這些訊息可用於提醒開發人員注意意外情況。
ERROR − 指示更嚴重的問題,這些問題會阻止特定功能或操作成功完成。這些訊息突出顯示需要立即關注的錯誤,但不一定終止應用程式。
CRITICAL − 最嚴重的級別,指示可能導致程式終止的嚴重錯誤。這些訊息保留用於需要立即干預的關鍵故障。
用法
以下是 Python 應用程式中每個日誌級別的使用場景 −
選擇正確的級別 − 選擇合適的日誌級別可確保日誌訊息提供相關資訊,而不會使日誌混亂。
設定級別 - 可以為記錄器、處理器和特定日誌訊息配置不同的級別,以控制記錄哪些訊息以及將其輸出到哪裡。
層次結構 - 日誌級別是分層的,這意味著在記錄器上設定級別也會影響與其關聯的處理器和日誌訊息。
基本日誌記錄示例
以下是 Python 中的基本日誌記錄示例,用於演示其用法和功能 -
import logging # Configure logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') # Example usage def calculate_sum(a, b): logging.debug(f"Calculating sum of {a} and {b}") result = a + b logging.info(f"Sum calculated successfully: {result}") return result # Main program if __name__ == "__main__": logging.info("Starting the program") result = calculate_sum(10, 20) logging.info("Program completed")
輸出
以下是上述程式碼的輸出 -
2024-06-19 09:00:06,774 - INFO - Starting the program 2024-06-19 09:00:06,774 - DEBUG - Calculating sum of 10 and 20 2024-06-19 09:00:06,774 - INFO - Sum calculated successfully: 30 2024-06-19 09:00:06,775 - INFO - Program completed
配置日誌記錄
在 Python 中配置日誌記錄是指設定各種元件,例如記錄器、處理器和格式化程式,以控制日誌訊息的儲存和顯示方式。此配置允許開發人員根據其應用程式的要求和部署環境自定義日誌記錄行為。
示例
在以下示例中,getLogger() 函式檢索或建立命名記錄器。記錄器根據其名稱進行分層組織。然後,建立諸如“StreamHandler”(控制檯處理器)之類的處理器以定義日誌訊息的去向。可以為它們配置特定的日誌級別和格式化程式。
格式化程式指定日誌記錄的佈局,確定列印或儲存日誌訊息時的顯示方式 -
import logging # Create logger logger = logging.getLogger('my_app') logger.setLevel(logging.DEBUG) # Set global log level # Create console handler and set level to debug console_handler = logging.StreamHandler() console_handler.setLevel(logging.DEBUG) # Create formatter formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') console_handler.setFormatter(formatter) # Add console handler to logger logger.addHandler(console_handler) # Example usage logger.debug('This is a debug message') logger.info('This is an info message') logger.warning('This is a warning message') logger.error('This is an error message') logger.critical('This is a critical message')
產生的結果如下所示 -
2024-06-19 09:05:20,852 - my_app - DEBUG - This is a debug message 2024-06-19 09:05:20,852 - my_app - INFO - This is an info message 2024-06-19 09:05:20,852 - my_app - WARNING - This is a warning message 2024-06-19 09:05:20,852 - my_app - ERROR - This is an error message 2024-06-19 09:05:20,852 - my_app - CRITICAL - This is a critical message
日誌記錄處理器
Python 中的日誌記錄處理器決定日誌訊息的處理和輸出位置。它們在將日誌訊息定向到特定目標(例如控制檯、檔案、電子郵件、資料庫甚至遠端伺服器)方面發揮著重要作用。
可以獨立配置每個處理器,以控制其處理的訊息的格式、日誌級別和其他屬性。
日誌記錄處理器的型別
以下是 Python 中各種型別的日誌記錄處理器 -
StreamHandler - 將日誌訊息傳送到流,例如 sys.stdout 或 sys.stderr。適用於在控制檯或命令列介面中顯示日誌訊息。
FileHandler - 將日誌訊息寫入檔案系統上的指定檔案。適用於持久日誌記錄和日誌資料的存檔。
RotatingFileHandler - 類似於 FileHandler,但會根據大小或時間間隔自動輪換日誌檔案。有助於管理日誌檔案大小並防止它們變得過大。
SMTPHandler - 透過 SMTP 將日誌訊息作為電子郵件傳送到指定的收件人。適用於提醒管理員或開發人員有關關鍵問題。
SysLogHandler - 將日誌訊息傳送到類 Unix 系統上的系統日誌(例如,syslog)。允許與系統範圍的日誌記錄功能整合。
MemoryHandler - 在記憶體中緩衝日誌訊息,並在達到特定緩衝區大小或超時後將其傳送到目標處理器。適用於批處理和管理突發日誌訊息。
HTTPHandler - 透過 HTTP 或 HTTPS 將日誌訊息傳送到 Web 伺服器。能夠將日誌訊息記錄到遠端伺服器或日誌記錄服務。