Python记录日志报警详解

 更新时间:2025年07月18日 09:09:24   作者:Tipriest_  
Python日志报警方案包括简单日志、邮件(需SMTP)、Slack(需requests)、桌面弹窗(需plyer),推荐基础方案用于本地开发,多通道组合提升可靠性,异步处理避免阻塞,敏感信息加密存储,根据场景选择,建议至少实现日志告警+主动通知方式

在 Python 标准库中,可以列举出如下常见场景日志报警解决方案:

方案 1:简单日志告警(推荐基础方案)

import logging

def send_alert(message):
    logging.error(f"ALERT: {message}")
    # 可扩展:同时写入文件/发送到日志服务器

# 配置日志格式
logging.basicConfig(
    level=logging.ERROR,
    format='%(asctime)s - %(levelname)s - %(message)s'
)

无需额外安装包,适合本地开发或简单场景

方案 2:邮件告警(需 SMTP 服务)

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 内置 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 通知(推荐团队协作)

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 创建 Incoming Webhook
  • .env 添加:
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/XXXX/YYYY

方案 4:桌面弹窗通知(适合本地开发)

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

最佳实践建议

多通道组合

def send_alert(message):
    logging.error(message)          # 基础日志
    send_to_slack_async(message)    # 异步非阻塞通知团队

异步处理

使用 threading 避免阻塞主程序:

import threading

def async_alert(message):
    threading.Thread(target=send_alert, args=(message,)).start()

敏感信息加密

对邮件/Slack 的凭据使用加密存储:

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

# 加载环境变量
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文件!")

选择依据

方案适用场景可靠性复杂度
日志开发环境/简单生产环境
邮件需要邮件通知的生产环境
Slack团队协作环境
桌面弹窗本地开发环境
组合方案关键业务系统最高

根据实际需求选择,建议至少实现日志告警 + 一种主动通知方式。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python4种配色方案详解(适合科研的配色)

    Python4种配色方案详解(适合科研的配色)

    配色的选择是在我们论文文章画图过程中经常面临的一个问题,下面这篇文章主要介绍了Python4种配色方案的相关资料,感兴趣的朋友一起看看吧
    2020-02-02
  • python 装饰器的使用与要点

    python 装饰器的使用与要点

    python的装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能;装饰器的返回值也是一个函数对象。简单的说装饰器就是一个用来返回函数的函数
    2021-05-05
  • python3.x中安装web.py步骤方法

    python3.x中安装web.py步骤方法

    在本篇文章里小编给大家分享的是关于python3.x中安装web.py步骤方法,需要的朋友们可以学习下。
    2020-06-06
  • Python Grid使用和布局详解

    Python Grid使用和布局详解

    这篇文章主要为大家详细介绍了Python Grid使用和布局,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Python中zip函数如何使用

    Python中zip函数如何使用

    在本篇文章里小编给大家分享的是关于Python中的zip函数用法,需要的朋友们可以学习参考下。
    2020-06-06
  • 一个超级简单的python web程序

    一个超级简单的python web程序

    这篇文章主要介绍了一个超级简单的python web程序,需要的朋友可以参考下
    2014-09-09
  • 在Python的Flask中使用WTForms表单框架的基础教程

    在Python的Flask中使用WTForms表单框架的基础教程

    WTForms由Python写成,为表单而生,提供了很多制作Web表单的实用API,和Flask框架结合使用效果拔群,这里我们就一起看一下在Python的Flask中使用WTForms表单框架的基础教程
    2016-06-06
  • 使用Python的networkx绘制精美网络图教程

    使用Python的networkx绘制精美网络图教程

    今天小编就为大家分享一篇使用Python的networkx绘制精美网络图教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python实现两字符串映射

    python实现两字符串映射

    这篇文章主要介绍了python实现两字符串映射方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 详解Python中神奇的字符串驻留机制

    详解Python中神奇的字符串驻留机制

    字符串驻留机制是Python针对字符串对象采取的一种内存优化技术。其目标是减少内存使用并提高程序的性能。这篇文章主要介绍了字符串驻留机制的简单应用,需要的可以参考一下
    2023-04-04

最新评论