深入詳解Python日志配置模板的全攻略
下面是一個 完整項目日志配置模板(含 YAML 配置 + Python 加載腳本 + 使用示例),支持:
- 多 handler(控制臺 + 文件)
- 統(tǒng)一日志格式
- 模塊化 logger
propagate=True,日志可傳遞- 支持日志輪轉(按大?。?/li>
- 可熱重載(通過
dictConfig)
項目結構建議
project/
├── config/
│ └── logging.yaml # 日志配置文件
├── src/
│ ├── __init__.py
│ ├── app/
│ │ ├── __init__.py
│ │ ├── api.py
│ │ └── db.py
│ └── main.py
├── logs/
│ └── app.log # 自動創(chuàng)建
└── requirements.txt
1.config/logging.yaml
version: 1
formatters:
standard:
format: "%(asctime)s | %(name)s | %(levelname)s | %(funcName)s:%(lineno)d | %(message)s"
datefmt: "%Y-%m-%d %H:%M:%S"
simple:
format: "%(name)s | %(levelname)s | %(message)s"
handlers:
console:
class: logging.StreamHandler
level: INFO
formatter: simple
stream: ext://sys.stderr
file:
class: logging.handlers.RotatingFileHandler
level: DEBUG
formatter: standard
filename: logs/app.log
maxBytes: 10485760 # 10MB
backupCount: 5 # 保留 5 個舊日志文件
loggers:
app:
level: DEBUG
handlers: [console, file]
propagate: true # 重要:讓日志傳給 root
app.api:
level: DEBUG
handlers: [console, file]
propagate: true
app.db:
level: DEBUG
handlers: [console, file]
propagate: true
app.utils:
level: INFO
handlers: [console, file]
propagate: true
root:
level: DEBUG
handlers: [console, file]
propagate: false # 一般不建議設為 false,除非你明確不想傳
說明:
RotatingFileHandler自動輪轉日志,避免文件過大propagate: true確保子 logger 日志能傳給 rootroot的propagate: false是為了防止日志無限循環(huán)(安全做法)
2.src/main.py—— 啟動入口配置日志
import logging.config
import yaml
import os
# 確保 logs 目錄存在
os.makedirs("logs", exist_ok=True)
# 加載 YAML 配置
def setup_logging(config_path="config/logging.yaml"):
with open(config_path, "r", encoding="utf-8") as f:
config = yaml.safe_load(f)
logging.config.dictConfig(config)
print("? 日志系統(tǒng)已配置完成!")
# 啟動時調用
if __name__ == "__main__":
setup_logging()
logger = logging.getLogger("app")
logger.info("?? 應用啟動成功!")
logger.debug("調試信息:初始化完成")
3.src/app/api.py—— 模塊內使用日志
import logging
logger = logging.getLogger("app.api") # 模塊化命名
def get_user(user_id: int):
logger.debug("開始查詢用戶,user_id=%d", user_id)
try:
# 模擬數(shù)據(jù)庫查詢
user = {"id": user_id, "name": "張三"}
logger.info("成功查詢用戶: %s", user)
return user
except Exception as e:
logger.error("查詢用戶失敗,user_id=%d, 錯誤: %s", user_id, str(e))
raise
4.requirements.txt
PyYAML>=6.0
輸出效果示例
運行 python src/main.py 輸出:
? 日志系統(tǒng)已配置完成!
2026-02-06 15:10:22 | app | INFO | __main__:<module> | ?? 應用啟動成功!
查看 logs/app.log:
2026-02-06 15:10:22 | app.api | DEBUG | get_user:10 | 開始查詢用戶,user_id=123
2026-02-06 15:10:22 | app.api | INFO | get_user:13 | 成功查詢用戶: {'id': 123, 'name': '張三'}
5.模板亮點總結
| 亮點 | 說明 |
|---|---|
| 一個 root + 多子 logger | 模塊清晰,便于追蹤 |
| YAML 配置,可讀性強 | 易于維護、團隊協(xié)作 |
| 日志輪轉(10MB) | 防止日志文件過大 |
| 統(tǒng)一日志格式 | 便于 ELK/Sentry 等工具解析 |
| 僅配置一次,全局生效 | 安全,無重復 handler |
| 支持 loguru 的平滑遷移 | 如后續(xù)改用 loguru,只需替換 logging 調用即可 |
到此這篇關于深入詳解Python日志配置模板的全攻略的文章就介紹到這了,更多相關Python日志配置模板內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Flask使用Pyecharts在單個頁面展示多個圖表的方法
這篇文章主要介紹了Flask使用Pyecharts在單個頁面展示多個圖表的方法,在Flask頁面展示echarts,主要有兩種方法,文中給大家介紹的非常詳細,需要的朋友可以參考下2019-08-08
Python線程池模塊ThreadPoolExecutor用法分析
這篇文章主要介紹了Python線程池模塊ThreadPoolExecutor用法,結合實例形式分析了Python線程池模塊ThreadPoolExecutor的導入與基本使用方法,需要的朋友可以參考下2018-12-12
Python實現(xiàn)讀取TXT文件數(shù)據(jù)并存進內置數(shù)據(jù)庫SQLite3的方法
這篇文章主要介紹了Python實現(xiàn)讀取TXT文件數(shù)據(jù)并存進內置數(shù)據(jù)庫SQLite3的方法,涉及Python針對txt文件的讀取及sqlite3數(shù)據(jù)庫的創(chuàng)建、插入、查詢等相關操作技巧,需要的朋友可以參考下2017-08-08
Python使用matplotlib繪制正弦和余弦曲線的方法示例
這篇文章主要介紹了Python使用matplotlib繪制正弦和余弦曲線的方法,結合實例形式分析了Python調用matplotlib庫進行圖形繪制想具體操作技巧,需要的朋友可以參考下2018-01-01

