diff --git a/doc/admin/config.rst b/doc/admin/config.rst index 12661ff290..04b562d523 100644 --- a/doc/admin/config.rst +++ b/doc/admin/config.rst @@ -136,6 +136,9 @@ Example:: ``tls``, ``ssl`` Use STARTTLS or SSL for the SMTP connection. Off by default. +``admins`` + Comma-separated list of e-mail addresses that should receive a report about every error 500 thrown by pretix. + Django settings --------------- diff --git a/src/pretix/helpers/logs.py b/src/pretix/helpers/logs.py new file mode 100644 index 0000000000..63485103fc --- /dev/null +++ b/src/pretix/helpers/logs.py @@ -0,0 +1,7 @@ +import logging +from django.conf import settings + + +class AdminExistsFilter(logging.Filter): + def filter(self, record): + return not settings.DEBUG and len(settings.ADMINS) > 0 diff --git a/src/pretix/settings.py b/src/pretix/settings.py index 2a2b1f5fc8..d36b429e2b 100644 --- a/src/pretix/settings.py +++ b/src/pretix/settings.py @@ -69,6 +69,8 @@ EMAIL_PORT = config.getint('mail', 'port', fallback=25) EMAIL_HOST_USER = config.get('mail', 'user', fallback='') EMAIL_HOST_PASSWORD = config.get('mail', 'password', fallback='') +ADMINS = [('Admin', n) for n in config.get('mail', 'admins', fallback='').split(",") if n] + SESSION_COOKIE_SECURE = SESSION_COOKIE_HTTPONLY = config.getboolean( 'pretix', 'securecookie', fallback=False) LANGUAGE_COOKIE_DOMAIN = SESSION_COOKIE_DOMAIN = CSRF_COOKIE_DOMAIN = config.get( @@ -231,6 +233,11 @@ LOGGING = { 'format': '%(levelname)s %(asctime)s %(name)s %(module)s %(message)s' }, }, + 'filters': { + 'require_admin_enabled': { + '()': 'pretix.helpers.logs.AdminExistsFilter', + } + }, 'handlers': { 'console': { 'level': loglevel, @@ -243,6 +250,11 @@ LOGGING = { 'filename': os.path.join(LOG_DIR, 'pretix.log'), 'formatter': 'default' }, + 'mail_admins': { + 'level': 'ERROR', + 'class': 'django.utils.log.AdminEmailHandler', + 'filters': ['require_admin_enabled'] + } }, 'loggers': { '': { @@ -251,12 +263,12 @@ LOGGING = { 'propagate': True, }, 'django.request': { - 'handlers': ['file', 'console'], + 'handlers': ['file', 'console', 'mail_admins'], 'level': loglevel, 'propagate': True, }, 'django.security': { - 'handlers': ['file', 'console'], + 'handlers': ['file', 'console', 'mail_admins'], 'level': loglevel, 'propagate': True, },