1. 使用 Python 輸出日誌的完整指南|從除錯到實務應用
在使用 Python 進行程式開發時,「輸出日誌」對於錯誤追蹤與功能確認是非常重要的。
本文將從基礎概念到實用技巧進行說明,幫助 Python 初學者有效掌握日誌的使用方法。
2. 什麼是 Python 的日誌輸出?基本概念與必要性解析
日誌輸出是指在程式執行過程中,記錄資訊或錯誤的機制。妥善利用日誌有以下幾個好處:
日誌輸出的好處
- 有助於錯誤分析
能夠協助快速定位錯誤發生的位置與原因。 - 可追蹤程式執行情況
能清楚掌握程式哪些部分運作正常,哪些部分發生異常。 - 可進行系統監控
在正式環境中,可以持續監控系統狀態,是營運維護的基礎。
與print()
的差異
初學者常使用的print()
函式雖然方便,但在正式開發中有以下限制:
- 無法靈活指定輸出位置(例如:檔案或外部服務)。
- 無法管理日誌等級(訊息的重要性分類)。
透過 Python 標準的 logging
模組,可以解決上述問題。

3. 使用 Python 標準的 logging
模組開始輸出日誌
Python 提供標準的 logging
模組,可輕鬆進行日誌輸出。本節將說明其基本使用方法。
日誌等級概要
在 logging
模組中,可以為日誌訊息設定表示重要性的「日誌等級」。以下是主要的日誌等級:
- DEBUG:除錯資訊,用於開發階段。
- INFO:資訊訊息,顯示程式執行的進度。
- WARNING:警告訊息,提示可能潛在問題。
- ERROR:錯誤訊息,表示程式出現問題無法正確執行。
- CRITICAL:重大錯誤,代表系統可能崩潰或異常中止。
基本用法
以下是使用 logging
模組進行簡單日誌輸出的範例:
import logging
# 基本日誌設定
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# 各種日誌等級輸出範例
logging.debug('這是除錯資訊')
logging.info('這是一般資訊訊息')
logging.warning('這是警告訊息')
logging.error('這是錯誤訊息')
logging.critical('這是重大錯誤訊息')
程式碼說明
basicConfig
:設定日誌輸出方式。透過level
參數可指定最低輸出等級。- 格式設定:
format
參數可自訂日誌訊息格式。 - 例如:
%(asctime)s
表示時間戳記、%(levelname)s
表示日誌等級、%(message)s
表示日誌內容。
4. 將 Python 日誌輸出到檔案或主控台的方法
日誌不僅可以輸出到螢幕,也可以儲存到檔案或傳送到外部系統。本節將說明如何設定不同的輸出位置。
輸出到主控台
使用 logging
模組的預設設定時,日誌會輸出到主控台(Console)。
import logging
logging.basicConfig(level=logging.INFO)
logging.info('主控台日誌輸出範例')
輸出到檔案
若要將日誌儲存到檔案,可在 basicConfig
中指定 filename
參數。
import logging
logging.basicConfig(filename='app.log', level=logging.INFO, format='%(asctime)s - %(message)s')
logging.info('這是輸出到檔案的日誌範例')
同時輸出到主控台與檔案
若需同時輸出到多個位置,可使用 logging
的 Handler 機制。
import logging
# 建立 logger
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
# 主控台處理器
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
# 檔案處理器
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.INFO)
# 設定格式
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
# 加入處理器到 logger
logger.addHandler(console_handler)
logger.addHandler(file_handler)
logger.info('這是同時輸出到主控台與檔案的日誌範例')

5. 在 Python 專案中有效使用日誌的技巧
本節將介紹在實際專案中實用的日誌最佳實踐。學習這些技巧可幫助提升除錯效率並改善日誌管理。
一致性的日誌設定
在大型專案中,維持一致的日誌設定非常重要。當多個模組或開發者共同協作時,統一格式與日誌等級設定能使分析與除錯更有效率。
以下是一個統一日誌設定的範例:
import logging
# 共用的日誌設定函式
def setup_logger(name, log_file, level=logging.INFO):
handler = logging.FileHandler(log_file)
handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
logger = logging.getLogger(name)
logger.setLevel(level)
logger.addHandler(handler)
return logger
# 為各模組建立 logger
app_logger = setup_logger('app_logger', 'app.log')
db_logger = setup_logger('db_logger', 'db.log')
# 日誌輸出範例
app_logger.info('應用程式的日誌訊息')
db_logger.error('資料庫的錯誤訊息')
例外處理與日誌輸出的結合
進行例外處理時,若能同時記錄日誌,將有助於更快速掌握錯誤的詳細內容。
以下為發生例外時的日誌記錄範例:
import logging
logging.basicConfig(filename='error.log', level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s')
try:
# 故意觸發錯誤的程式碼
1 / 0
except ZeroDivisionError as e:
logging.error(f'發生除以零錯誤:{e}')
加入背景資訊的日誌訊息
根據專案需求,在日誌中加入額外的背景資訊(例如使用者 ID、交易 ID)可以讓分析更加全面。
import logging
logging.basicConfig(filename='context.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
user_id = 12345
transaction_id = 'txn_001'
logging.info(f'使用者 ID: {user_id}, 交易 ID: {transaction_id} - 操作成功')
適當過濾日誌內容
當日誌產出量龐大時,可透過自訂過濾器來僅輸出需要的訊息。以下是過濾器的範例:
import logging
class DebugFilter(logging.Filter):
def filter(self, record):
return record.levelno == logging.DEBUG
logger = logging.getLogger('filtered_logger')
handler = logging.StreamHandler()
handler.addFilter(DebugFilter())
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
logger.debug('這是除錯日誌')
logger.info('這則訊息不會顯示')
6. 增強 Python 日誌功能的三大推薦套件
除了標準的 logging
模組之外,Python 社群還提供多個強大實用的日誌套件。本節將介紹三款特別受歡迎的工具。
Loguru:適合初學者的簡易日誌套件
特色:
- 安裝與設定非常簡單。
- 語法比標準
logging
更直觀。
安裝方式:
pip install loguru
基本用法:
from loguru import logger
logger.info('這是使用 Loguru 輸出的日誌')
logger.error('也能輕鬆記錄錯誤訊息')
Logzero:輕量級且易用的日誌套件
特色:
- 輕鬆自訂設定。
- 內建日誌輪替(rotation)功能。
安裝方式:
pip install logzero
基本用法:
from logzero import logger
logger.info('這是使用 Logzero 輸出的日誌')
logger.warning('這是一則警告訊息')
Structlog:專為結構化日誌設計的套件
特色:
- 可輕鬆輸出 JSON 格式的日誌。
- 適用於分散式系統與雲端環境。
安裝方式:
pip install structlog
基本用法:
import structlog
logger = structlog.get_logger()
logger.info('event', user='12345', action='login')

7. 解決有關 Python 日誌輸出的常見疑問!
Q1. 為什麼日誌沒有被輸出?
解答:
請確認是否正確設定了日誌等級。預設情況下,只有 WARNING
以上等級的訊息會被輸出。
Q2. 如果日誌檔案變得太大怎麼辦?
解答:
可以使用 RotatingFileHandler
,根據檔案大小自動進行輪替,避免單一檔案過大。
Q3. 要如何選擇第三方日誌套件?
解答:
可根據專案的規模與需求選擇。若是小型專案建議使用 Loguru
;若需要結構化日誌則推薦 Structlog
。
8. 精通 Python 日誌輸出,提升開發效率!
本文從 Python 日誌輸出的基礎知識到進階技巧,以及實用的第三方套件都進行了說明。透過適當的日誌設計,不僅能有效除錯,還能大幅提升系統監控與維運的效率。
趕快開始在你的專案中實踐這些技巧吧!