深入詳解Python日志配置模板的全攻略
下面是一個(gè) 完整項(xiàng)目日志配置模板(含 YAML 配置 + Python 加載腳本 + 使用示例),支持:
- 多 handler(控制臺 + 文件)
- 統(tǒng)一日志格式
- 模塊化 logger
propagate=True,日志可傳遞- 支持日志輪轉(zhuǎn)(按大?。?/li>
- 可熱重載(通過
dictConfig)
項(xiàng)目結(jié)構(gòu)建議
project/
├── config/
│ └── logging.yaml # 日志配置文件
├── src/
│ ├── __init__.py
│ ├── app/
│ │ ├── __init__.py
│ │ ├── api.py
│ │ └── db.py
│ └── main.py
├── logs/
│ └── app.log # 自動(dòng)創(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 個(gè)舊日志文件
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 # 一般不建議設(shè)為 false,除非你明確不想傳
說明:
RotatingFileHandler自動(dòng)輪轉(zhuǎn)日志,避免文件過大propagate: true確保子 logger 日志能傳給 rootroot的propagate: false是為了防止日志無限循環(huán)(安全做法)
2.src/main.py—— 啟動(dòng)入口配置日志
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)已配置完成!")
# 啟動(dòng)時(shí)調(diào)用
if __name__ == "__main__":
setup_logging()
logger = logging.getLogger("app")
logger.info("?? 應(yīng)用啟動(dòng)成功!")
logger.debug("調(diào)試信息:初始化完成")
3.src/app/api.py—— 模塊內(nèi)使用日志
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, 錯(cuò)誤: %s", user_id, str(e))
raise
4.requirements.txt
PyYAML>=6.0
輸出效果示例
運(yùn)行 python src/main.py 輸出:
? 日志系統(tǒng)已配置完成!
2026-02-06 15:10:22 | app | INFO | __main__:<module> | ?? 應(yīng)用啟動(dòng)成功!
查看 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.模板亮點(diǎn)總結(jié)
| 亮點(diǎn) | 說明 |
|---|---|
| 一個(gè) root + 多子 logger | 模塊清晰,便于追蹤 |
| YAML 配置,可讀性強(qiáng) | 易于維護(hù)、團(tuán)隊(duì)協(xié)作 |
| 日志輪轉(zhuǎn)(10MB) | 防止日志文件過大 |
| 統(tǒng)一日志格式 | 便于 ELK/Sentry 等工具解析 |
| 僅配置一次,全局生效 | 安全,無重復(fù) handler |
| 支持 loguru 的平滑遷移 | 如后續(xù)改用 loguru,只需替換 logging 調(diào)用即可 |
到此這篇關(guān)于深入詳解Python日志配置模板的全攻略的文章就介紹到這了,更多相關(guān)Python日志配置模板內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Flask使用Pyecharts在單個(gè)頁面展示多個(gè)圖表的方法
這篇文章主要介紹了Flask使用Pyecharts在單個(gè)頁面展示多個(gè)圖表的方法,在Flask頁面展示echarts,主要有兩種方法,文中給大家介紹的非常詳細(xì),需要的朋友可以參考下2019-08-08
使用Python獲取當(dāng)前工作目錄和執(zhí)行命令的位置
這篇文章主要介紹了使用Python獲取當(dāng)前工作目錄和執(zhí)行命令的位置,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
scrapy中的spider傳參實(shí)現(xiàn)增量的方法
有時(shí)候需要根據(jù)項(xiàng)目的實(shí)際需求向spider傳遞參數(shù)來控制spider的運(yùn)行方式,本文主要介紹了scrapy中的spider傳參實(shí)現(xiàn)增量的方法,具有一定的參考價(jià)值,感興趣的可以了解一下2022-06-06
python獲取標(biāo)準(zhǔn)北京時(shí)間的方法
這篇文章主要介紹了python獲取標(biāo)準(zhǔn)北京時(shí)間的方法,實(shí)例分析了Python通過www.beijing-time.org的官網(wǎng)獲取標(biāo)準(zhǔn)北京時(shí)間的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
Python線程池模塊ThreadPoolExecutor用法分析
這篇文章主要介紹了Python線程池模塊ThreadPoolExecutor用法,結(jié)合實(shí)例形式分析了Python線程池模塊ThreadPoolExecutor的導(dǎo)入與基本使用方法,需要的朋友可以參考下2018-12-12
Python自己定義一個(gè)求累加和的函數(shù)方式
定義了一個(gè)函數(shù)來計(jì)算不確定數(shù)量參數(shù)的累加和,使用`*args`來接收不定數(shù)量的位置參數(shù),函數(shù)內(nèi)部通過遍歷`args`并使用`sum()`函數(shù)計(jì)算所有參數(shù)的累加和,運(yùn)行結(jié)果是累加和的值2025-11-11
python?aeon庫進(jìn)行時(shí)間序列算法預(yù)測分類實(shí)例探索
這篇文章主要介紹了python?aeon庫進(jìn)行時(shí)間序列算法預(yù)測分類實(shí)例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-02-02
Python實(shí)現(xiàn)讀取TXT文件數(shù)據(jù)并存進(jìn)內(nèi)置數(shù)據(jù)庫SQLite3的方法
這篇文章主要介紹了Python實(shí)現(xiàn)讀取TXT文件數(shù)據(jù)并存進(jìn)內(nèi)置數(shù)據(jù)庫SQLite3的方法,涉及Python針對txt文件的讀取及sqlite3數(shù)據(jù)庫的創(chuàng)建、插入、查詢等相關(guān)操作技巧,需要的朋友可以參考下2017-08-08
Python使用matplotlib繪制正弦和余弦曲線的方法示例
這篇文章主要介紹了Python使用matplotlib繪制正弦和余弦曲線的方法,結(jié)合實(shí)例形式分析了Python調(diào)用matplotlib庫進(jìn)行圖形繪制想具體操作技巧,需要的朋友可以參考下2018-01-01

