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团队协作环境
桌面弹窗本地开发环境
组合方案关键业务系统最高

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

总结

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

相关文章

  • Python实现中文文本处理与分析程序的示例详解

    Python实现中文文本处理与分析程序的示例详解

    在当今信息爆炸的时代,文本数据的处理与分析成为了数据科学领域的重要课题,本文将使用Python开发一款基于Python的中文文本处理与分析程序,希望对大家有所帮助
    2025-07-07
  • 使用paramiko远程执行命令、下发文件的实例

    使用paramiko远程执行命令、下发文件的实例

    下面小编就为大家带来一篇使用paramiko远程执行命令、下发文件的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 教你用Python写一个京东自动下单抢购脚本

    教你用Python写一个京东自动下单抢购脚本

    很多朋友都有网购抢购限量商品的经历,有时候蹲点抢怎么也抢不到,今天小编带你们学习怎么用Python写一个京东自动下单抢购脚本,以后再也不用拼手速拼网速啦,快来一起看看吧
    2023-03-03
  • python多个模块py文件的数据共享实例

    python多个模块py文件的数据共享实例

    今天小编就为大家分享一篇python多个模块py文件的数据共享实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Windows下Python3.6安装第三方模块的方法

    Windows下Python3.6安装第三方模块的方法

    这篇文章主要介绍了Windows下Python3.6安装第三方模块的方法,需要的朋友可以参考下
    2018-11-11
  • python实现趣味图片字符化

    python实现趣味图片字符化

    这篇文章主要为大家详细介绍了python实现趣味图片字符化,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • Python WSGI HTTP服务器Gunicorn使用详解

    Python WSGI HTTP服务器Gunicorn使用详解

    Gunicorn是Python的WSGI服务器,用于部署Flask/Django应用,性能高且稳定,支持多Worker类型与配置,可处理并发请求,需优化参数并确保生产环境安全
    2025-08-08
  • python正则表达式最详解

    python正则表达式最详解

    篇文章主要介绍了Python中正则表达式的详细解释,正则表达式是Python学习进阶当中的重要内容,需要的朋友可以参考下
    2021-11-11
  • Python如何实现守护进程的方法示例

    Python如何实现守护进程的方法示例

    护进程:通常被定义为一个后台进程,而且它不属于任何一个终端会话(terminal session)。许多系统服务由守护程序实施;如网络服务,打印等。 下面这篇文章给大家分享了Python是如何实现守护进程的方法示例,需要的朋友可以参考借鉴。
    2017-02-02
  • PyTorch中torch.nn模块的实现

    PyTorch中torch.nn模块的实现

    torch.nn是PyTorch中用于构建神经网络的核心模块,包括多种组件,每个组件都有其特定的原理和使用场景,本文就来详细的介绍一下如何使用,感兴趣的可以了解一下
    2024-09-09

最新评论