Python記錄日志報(bào)警詳解
在 Python 標(biāo)準(zhǔn)庫(kù)中,可以列舉出如下常見(jiàn)場(chǎng)景日志報(bào)警解決方案:
方案 1:簡(jiǎn)單日志告警(推薦基礎(chǔ)方案)
import logging def send_alert(message): logging.error(f"ALERT: {message}") # 可擴(kuò)展:同時(shí)寫入文件/發(fā)送到日志服務(wù)器 # 配置日志格式 logging.basicConfig( level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s' )
? 無(wú)需額外安裝包,適合本地開(kāi)發(fā)或簡(jiǎn)單場(chǎng)景
方案 2:郵件告警(需 SMTP 服務(wù))
import smtplib from email.mime.text import MIMEText from os import getenv def send_alert(message): msg = MIMEText(message) msg["Subject"] = "API Key 異常告警" msg["From"] = getenv("ALERT_EMAIL_FROM") # 從.env讀取 msg["To"] = getenv("ALERT_EMAIL_TO") with smtplib.SMTP_SSL(getenv("SMTP_SERVER"), 465) as server: server.login(getenv("SMTP_USER"), getenv("SMTP_PASSWORD")) server.send_message(msg)
依賴包:Python 內(nèi)置 smtplib
+ email
需在 .env
中配置:
SMTP_SERVER=smtp.example.com SMTP_USER=alert@example.com SMTP_PASSWORD=your_email_password ALERT_EMAIL_FROM=alert@example.com ALERT_EMAIL_TO=devops@example.com
方案 3:Slack 通知(推薦團(tuán)隊(duì)協(xié)作)
import requests from os import getenv def send_alert(message): webhook_url = getenv("SLACK_WEBHOOK_URL") payload = {"text": f"?? 告警: {message}"} requests.post(webhook_url, json=payload)
依賴包:需安裝 requests
配置步驟:
- 在 Slack 創(chuàng)建 Incoming Webhook
- 在
.env
添加:
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/XXXX/YYYY
方案 4:桌面彈窗通知(適合本地開(kāi)發(fā))
from plyer import notification import sys def send_alert(message): if sys.platform in ["win32", "darwin", "linux"]: notification.notify( title="密鑰異常", message=message, app_icon=None, timeout=10 )
依賴包:需安裝 plyer
pip install plyer
最佳實(shí)踐建議
多通道組合
def send_alert(message): logging.error(message) # 基礎(chǔ)日志 send_to_slack_async(message) # 異步非阻塞通知團(tuán)隊(duì)
異步處理
使用 threading
避免阻塞主程序:
import threading def async_alert(message): threading.Thread(target=send_alert, args=(message,)).start()
敏感信息加密
對(duì)郵件/Slack 的憑據(jù)使用加密存儲(chǔ):
from cryptography.fernet import Fernet # 加密 cipher = Fernet(key) encrypted = cipher.encrypt(b"secret_password") # 解密 cipher.decrypt(encrypted)
完整示例代碼
import os import logging from dotenv import load_dotenv from threading import Thread import requests # 加載環(huán)境變量 load_dotenv() # 配置日志 logging.basicConfig( level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s' ) def send_alert(message): """多通道告警""" # 1. 本地日志 logging.error(message) # 2. 異步Slack通知 def _slack_alert(msg): try: webhook = os.getenv("SLACK_WEBHOOK") requests.post(webhook, json={"text": msg}, timeout=3) except Exception as e: logging.error(f"Slack通知失敗: {str(e)}") Thread(target=_slack_alert, args=(message,)).start() # 使用示例 try: api_key = os.environ["API_KEY"] except KeyError: send_alert("API_KEY 缺失!立即更新.env文件!")
選擇依據(jù)
方案 | 適用場(chǎng)景 | 可靠性 | 復(fù)雜度 |
---|---|---|---|
日志 | 開(kāi)發(fā)環(huán)境/簡(jiǎn)單生產(chǎn)環(huán)境 | 高 | 低 |
郵件 | 需要郵件通知的生產(chǎn)環(huán)境 | 中 | 中 |
Slack | 團(tuán)隊(duì)協(xié)作環(huán)境 | 高 | 中 |
桌面彈窗 | 本地開(kāi)發(fā)環(huán)境 | 低 | 低 |
組合方案 | 關(guān)鍵業(yè)務(wù)系統(tǒng) | 最高 | 高 |
根據(jù)實(shí)際需求選擇,建議至少實(shí)現(xiàn)日志告警 + 一種主動(dòng)通知方式。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
一個(gè)超級(jí)簡(jiǎn)單的python web程序
這篇文章主要介紹了一個(gè)超級(jí)簡(jiǎn)單的python web程序,需要的朋友可以參考下2014-09-09在Python的Flask中使用WTForms表單框架的基礎(chǔ)教程
WTForms由Python寫成,為表單而生,提供了很多制作Web表單的實(shí)用API,和Flask框架結(jié)合使用效果拔群,這里我們就一起看一下在Python的Flask中使用WTForms表單框架的基礎(chǔ)教程2016-06-06使用Python的networkx繪制精美網(wǎng)絡(luò)圖教程
今天小編就為大家分享一篇使用Python的networkx繪制精美網(wǎng)絡(luò)圖教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11