Django 配置 LOGGING

瞳人


发布于 Oct. 7, 2015, 8:13 p.m.

0 个评论

Django


在 DEBUG = Fasle 的情况下, 发送日志邮件到 ADMINS 中的 LOGGING 的配置.

在 Django 的正式部署时, 我们需要把 DEBUG 设置成 False, 但是这样在出错时, 我们可能不能很方便看到 python 调用堆栈错误等信息, 而且我们也不会时时注意到服务出问题. 我们可以通过配置一下 Django 的 LOGGING 服务来帮助我们及时获得报错等日志信息.

设置方法

修改settings.py:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
DEBUG = False
...
ADMINS = (
    # ('Your Name', 'your_email@example.com'),
)

MANAGERS = ADMINS

DEFAULT_FROM_EMAIL = 'noreply@example.com'
SERVER_EMAIL = 'admin@example.com'

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse',
        }
    },
    'handlers': {
        'null': {
            'level': 'DEBUG',
            'class': 'logging.NullHandler',
        },
        'mail_admins': {
            'level': 'ERROR',
            # 仅当 DEBUG = False 时才发送邮件
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler',
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
        # 对于不在 ALLOWED_HOSTS 中的请求不发送报错邮件
        'django.security.DisallowedHost': {
            'handlers': ['null'],
            'propagate': False,
        },
    }
}

当客户端访问网页时, 其 HTTP host header 不在 ALLOWED_HOSTS 中的时候, Django 会返回一个 400 响应, 并且会记录一个错误信息到 django.security.DisallowedHost 中. 但是我们常常清楚我们允许哪些域名访问, 所以 我们不需要这类报错邮件.

由于我一开始没有设置 django.security.DisallowedHost 不发送邮件, 导致了 mailgun 发送了很多邮件给我, 既浪费了邮件数量, 又导致我的邮箱收到几十封无用的邮件.

mailgun log

参考链接

  1. Django 官方的 configuring logging 文档

哎呦, 不错哦!

0 Comments


Leave a Comment:

博客搜索

友情链接

公告

本博客代码已经公布在 Github 上,欢迎交流指正。

QQ 邮箱对 mailgun 不太友好, 所以使用 QQ 邮箱的评论, 可能会无法及时收到邮件。我会尽快寻找其他解决方案的。

本人现在独自使用 linode vps, 20 美元/月, 感觉压力大, 如果有意一起合租, 可以联系我. 在我的任意一篇文章下面留言即可. 关于使用方式, 现在倾向于使用 docker.