Logging和电子邮件不适用于Django 500 [英] Logging and email not working for Django for 500

查看:109
本文介绍了Logging和电子邮件不适用于Django 500的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法在Django网络应用程序中登录工作。



我的设置文件如下所示:

  EMAIL_HOST =smtp .gmail.com
EMAIL_PORT = 465
EMAIL_HOST_USER =paulhtremblay@gmail.com
EMAIL_HOST_PASSWORD =密码
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL =paulhtremblay @ gmail.com
SERVER_EMAIL ='smtp.gmail.com'

ADMINS =(
('Paul Tremblay','paulhtremblay@gmail.com'),


LOGGING = {
'version':1,
'disable_existing_loggers':False,
'handlers':{
'file' {
'level':'ERROR',
'class':'logging.FileHandler',
'filename':'/var/log/django_logs/debug.log'
},
'mail_admins':{
'level':'ERROR',
'class':'django.utils.log.AdminEmailHandler'
},
},
'loggers':{
'django':{
'handlers':['file'],
'level':'ERROR',
'propagate':True,
},
'django.request':{
'handlers':['file'],
'level':'ERROR',
'propagate':True,
},
},
}

我在我的视图文件中有这个:

  def five_hundred_test(request):
raise ValueError(为目的测试500)
return render(request,'my_test / basic_css.html')

当我将浏览器指向此功能时,我会收到一个500错误(如预期),但没有发送到我的电子邮件,没有任何东西放入日志文件。我使用Django 1.9,使用python3,使用Apache来运行服务器。

解决方案

这是我的工作设置。我没有添加一个控制台记录器,因为我只用于生产。灵感源于Django文档的相关日志记录示例。 / p>

以下是我的电子邮件和日志设置:

  from os.path import join 

#电子邮件配置================================= ===================
ADMINS = [('我','我的@ email'),]
MANAGERS = ADMINS
DEFAULT_FROM_EMAIL ='from @ email'
SERVER_EMAIL ='error_from @ email'
EMAIL_HOST ='smtp.server'
EMAIL_HOST_USER ='username_for_login'
EMAIL_HOST_PASSWORD ='password_for_login'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

#记录配置====================== ============================
LOGGING = {
'version':1,
'disable_existing_loggers':False,
'formatters':{
'verbose':{
'format':'%(leveln ame)s%(asctime)s%(module)s%(process)d%(thread)d%(message)s'
},
'simple':{
'format ':'%(levelname)s%(message)s'
},
},
'处理程序':{
'file':{
' ':'ERROR',
'class':'logging.FileHandler',
'filename':join(HOME_DIR,'my_logs','debug.log'),
'formatter' :'verbose'
},
'mail_admins':{
'level':'ERROR',
'class':'django.utils.log.AdminEmailHandler',
'formatter':'simple'
},
},
'loggers':{
'django':{
'handlers':['文件'],
'level':'ERROR',
'propagate':True,
},
'django.request':{
' :[ mail_admins'],
'level':'ERROR',
'propagate':True,
},
},
}

我发现您的环境变量有两个错误:




  • SERVER_EMAIL 设置必须是电子邮件地址。

  • 您正在使用 TLS ,因此正确的端口应为587。



此外,您尝试将Google用作SMTP服务器,但根据此更新的答案此服务不再可以从谷歌搜索,您必须搜索另一个SMTP服务器。



我也有组装了一个帖子,几个调试技术,如果你需要使用。


I can't get logging to work in my Django web app.

My settings file looks like this:

EMAIL_HOST = "smtp.gmail.com"
EMAIL_PORT = 465
EMAIL_HOST_USER = "paulhtremblay@gmail.com"
EMAIL_HOST_PASSWORD = "password"
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = "paulhtremblay@gmail.com"
SERVER_EMAIL = 'smtp.gmail.com'

ADMINS = (
      ('Paul Tremblay', 'paulhtremblay@gmail.com'),
      )

 LOGGING = { 
'version': 1,
'disable_existing_loggers': False,
'handlers': {
    'file': {
        'level': 'ERROR',
        'class': 'logging.FileHandler',
        'filename': '/var/log/django_logs/debug.log'
    },
    'mail_admins': {
     'level': 'ERROR',
       'class': 'django.utils.log.AdminEmailHandler'
               },
},  
'loggers': {
    'django': {
    'handlers': ['file'],
    'level': 'ERROR',
    'propagate': True,
    },
    'django.request': {
    'handlers': ['file'],
    'level': 'ERROR',
    'propagate': True,
    },
},  
 }

I have this in my views file:

 def five_hundred_test(request):
   raise ValueError("raising this on purpose for testing for 500")
   return render(request, 'my_test/basic_css.html')

When I point my browser to this function, I get a 500 Error (as expected), but nothing gets sent to my email, and nothing gets put in the log file. I am using Django 1.9, with python3, using Apache to run the server.

解决方案

This is my working setup. I have not added a console logger, as I am using it only to production. The inspiration came from the relevant Logging Examples of Django docs.

Here are my email and logging settings:

from os.path import join

# Email Configuration ==========================================================
ADMINS = [('Me', 'my@email'), ]
MANAGERS = ADMINS
DEFAULT_FROM_EMAIL = 'from@email'
SERVER_EMAIL = 'error_from@email'
EMAIL_HOST = 'smtp.server'
EMAIL_HOST_USER = 'username_for_login'
EMAIL_HOST_PASSWORD = 'password_for_login'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

# Logging Configuration ========================================================
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'handlers': {
        'file': {
            'level': 'ERROR',
            'class': 'logging.FileHandler',
            'filename': join(HOME_DIR, 'my_logs', 'debug.log'),
            'formatter': 'verbose'
        },
        'mail_admins': {
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler',
            'formatter': 'simple'
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'ERROR',
            'propagate': True,
        },
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
    },
}

I have spotted two errors to your environment variables:

  • The SERVER_EMAIL setting must be be an email address.
  • You are using TLS and therefore the correct port should be 587.

Moreover, you are trying to use Google as an SMTP server, but according to this updated answer this service is no longer available from google and you have to search for another SMTP server.

I have also assembled a post with a couple debugging techniques if you need to use.

这篇关于Logging和电子邮件不适用于Django 500的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆