本文目录导读:

是的,脚本完全可以自动发送日志摘要邮件,您可以根据自己的技术栈和环境选择不同的实现方式,以下是几种常见的方法:
Shell 脚本 + mail/mutt(Linux 环境)
#!/bin/bash
# 生成日志摘要
LOG_FILE="/var/log/myapp/app.log"
SUBJECT="每日日志摘要 - $(date '+%Y-%m-%d')"
RECIPIENT="admin@example.com"
# 提取关键信息
ERROR_COUNT=$(grep -c "ERROR" $LOG_FILE)
WARNING_COUNT=$(grep -c "WARNING" $LOG_FILE)
# 创建邮件内容
{
echo "主题: $SUBJECT"
echo "To: $RECIPIENT"
echo ""
echo "日志摘要报告"
echo "============"
echo "报告时间: $(date)"
echo ""
echo "错误数量: $ERROR_COUNT"
echo "警告数量: $WARNING_COUNT"
echo ""
echo "最新错误信息:"
grep "ERROR" $LOG_FILE | tail -5
} | mail -s "$SUBJECT" "$RECIPIENT"
Python 脚本(更灵活)
import smtplib
import subprocess
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from datetime import datetime
def get_log_summary():
# 使用 grep 获取日志摘要
result = subprocess.run(
['grep', '-c', 'ERROR', '/var/log/myapp/app.log'],
capture_output=True, text=True
)
error_count = result.stdout.strip()
# 获取最新错误
result = subprocess.run(
['grep', 'ERROR', '/var/log/myapp/app.log'],
capture_output=True, text=True
)
recent_errors = result.stdout.split('\n')[-5:]
return error_count, recent_errors
def send_email():
error_count, recent_errors = get_log_summary()
# 构建邮件
msg = MIMEMultipart()
msg['Subject'] = f"日志摘要 - {datetime.now().strftime('%Y-%m-%d')}"
msg['From'] = "noreply@example.com"
msg['To'] = "admin@example.com"
body = f"""
日志摘要报告
============
报告时间: {datetime.now()}
错误数量: {error_count}
最新错误信息:
{chr(10).join(recent_errors)}
"""
msg.attach(MIMEText(body, 'plain'))
# 发送邮件
with smtplib.SMTP('smtp.example.com', 587) as server:
server.starttls()
server.login("username", "password")
server.send_message(msg)
if __name__ == "__main__":
send_email()
使用 cron 自动执行
将脚本添加到 crontab 中:
# 每天上午9点执行 0 9 * * * /path/to/log_summary.sh # 如果需要日志记录 0 9 * * * /path/to/log_summary.sh >> /var/log/mail_log_summary.log 2>&1
增强功能建议
- HTML 格式邮件:使用 HTML 格式化报告,更美观
- 附件:发送完整日志文件或压缩包
- 异常告警:错误超过阈值时立即发送告警
- 多日志源:汇总多个应用的日志
- 数据库存储:将历史摘要存储到数据库
邮件发送方式对比
| 方式 | 优点 | 缺点 |
|---|---|---|
| mail/mutt | 简单,系统自带 | 功能有限 |
| Python smtplib | 灵活,可定制 | 需要 Python 环境 |
| curl | 可调用邮件 API | 需要 API 支持 |
注意事项
- 确保发送邮件的权限和配置正确
- 注意日志文件大小,避免长时间处理
- 考虑添加错误处理和重试机制
- 敏感信息注意脱敏处理
根据您的具体需求和环境,选择最适合的实现方式即可,如果需要更详细的示例或特定场景的实现,请告诉我!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播