社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

5分钟教你学会Django系统错误监控

马哥Linux运维 • 7 年前 • 2459 次点击  

话不多说,直入正题。

先上图,看一下监控的效果。

如下是监控我们网站系统错误的邮件。包含了请求的url地址,以及详细的异常信息。

一、监控所有的request请求


如何实现系统监控,自动发送错误日志的邮件呢?

只需配置配置settings文件即可。

1.设置发送邮件配置信息

邮件会发送到ADMINS设定的邮件列表中。

SERVER_EMAIL ='sender@qq.com'

DEFAULT_FROM_EMAIL ='sender@qq.com'

ADMINS = (('receiver','receiver@qq.com'),)

EMAIL_HOST ='smtp.exmail.qq.com'

EMAIL_HOST_USER ='sender@qq.com'

EMAIL_HOST_PASSWORD ='123456'

EMAIL_BACKEND ='django.core.mail.backends.smtp.EmailBackend'

2.配置LOGGING

1)配置mail_admin的handler

level为日志级别

django.utils.log.AdminEmailHandler为django处理系统日志发送邮件的handler

在没有配置filter参数情况下,默认发送系统5XX状态的错误日志

'handlers': {

    'mail_admin': {

    'level':'ERROR',

    'class':'django.utils.log.AdminEmailHandler',

    'include_html':False,

    }

}

2)配置django.request模块的logger

将django的request模块配置如上的mail_admin handler

'loggers': {

    'django.request': {

    'handlers': ['default','mail_admin'],

    'propagate':True,

    'level':'ERROR',

    },

}

二、监控非request请求


如何监控例如系统的定时任务等非用户发起的功能模块,我们可以自定义一个decorator来解决这个问题。

utils.send_exception_email(email_list,title,exc)为发送邮件的方法,可以自己实现,非常简单

def decorator_error_monitor(title):

    def wrap(f):

        def wrapped_f(*args,**kwargs):

            try:

                result = f(*args,**kwargs)

                return result

           except:

               exc = traceback.format_exc()

               utils.send_exception_email(email_list,title,exc)

               raise Exception(exc)

            return wrapped_f

        return wrap

对需要监控的方法使用decorator

@decorator_error_monitor("清算错误")

def do_settlement(users):

    for user in users:

        process_settlement_for_one_user(user)

监控效果如下图所示:

小结


以上监控方法,简单实用,无需开发额外的日志监控系统,可以在第一时间发现系统的问题,并得知系统的错误日志,帮助快速的定位问题。


作者:MrLeo1024
来源:http://www.jianshu.com/p/42e4287ffeda



————广告时间————

马哥教育2017年Python自动化运维开发实战班,马哥联合BAT、豆瓣等一线互联网Python开发达人,根据目前企业需求的Python开发人才进行了深度定制,加入了大量一线互联网公司:大众点评、饿了么、腾讯等生产环境真是项目,课程由浅入深,从Python基础到Python高级,让你融汇贯通Python基础理论,手把手教学让你具备Python自动化开发需要的前端界面开发、Web框架、大监控系统、CMDB系统、认证堡垒机、自动化流程平台六大实战能力,让你从0开始蜕变成Hold住年薪20万的Python自动化开发人才

扫描二维码领取学习资料




感谢您抽出  · 来阅读此文

更多Python好文请点击【阅读原文】哦

↓↓↓



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/HmeAWnBTp3
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/3537
 
2459 次点击  
文章 [ 1 ]  |  最新文章 7 年前
jieshaodmm
Reply   •   1 楼
jieshaodmm    7 年前

一般情况下你不需要定义这个字段,django会默认自动帮你生成一个自增的主键字段。

from django.db import models

class User(models.Model):
                # id = models.AutoField(primary_key=True)
                name = models.CharField(max_length=32, verbose_name='名字')
                # 其他内容

上面注释掉的就是django帮我们添加的

如果你想自己定义主键字段,而且你这里用UUIDField,可以这样写:

import uuid
from django.db import models

class MyUUIDModel(models.Model):
    user_id = models.UUIDField(primary_key=True, default=uuid.uuid3, editable=False)
    # 其他内容
生当为何你知吗
Reply   •   2 楼
生当为何你知吗    7 年前

你好,我是一个Django初学者,在使用Django开发的时候遇到一个问题: 我在models.py中创建一张User表,包含一个userId字段,并设置它为唯一键默认值是uuid.uuid3().

然后在admin中添加一个user的时候报错(userId字段不能重复),也就是说 admin并不是在每次创建user的时候都会给一个随机的userId,请问此处我应该怎么改才能满足需求?,请帮忙回答谢谢!!