Made the logging settings explicit in ietf/settings.py (instead of copying default then modifying), and added enough surrounding information to make it possible to read also for people not very familiar with Python's intricate logging infrastructure. To a large extent to understand myself how the logging is set up in Django, and where to hook in the affirm() function.

- Legacy-Id: 12902
This commit is contained in:
Henrik Levkowetz 2017-02-23 11:53:31 +00:00
parent 49af9b4e1a
commit c4cdb82a39

View file

@ -168,11 +168,6 @@ AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', )
# ------------------------------------------------------------------------
# Django/Python Logging Framework Modifications
# enable HTML error emails
from django.utils.log import DEFAULT_LOGGING
LOGGING = DEFAULT_LOGGING.copy()
LOGGING['handlers']['mail_admins']['include_html'] = True
# Filter out "Invalid HTTP_HOST" emails
# Based on http://www.tiwoc.de/blog/2013/03/django-prevent-email-notification-on-suspiciousoperation/
from django.core.exceptions import SuspiciousOperation
@ -182,11 +177,7 @@ def skip_suspicious_operations(record):
if isinstance(exc_value, SuspiciousOperation):
return False
return True
LOGGING['filters']['skip_suspicious_operations'] = {
'()': 'django.utils.log.CallbackFilter',
'callback': skip_suspicious_operations,
}
LOGGING['handlers']['mail_admins']['filters'] += [ 'skip_suspicious_operations' ]
# Filter out UreadablePostError:
from django.http import UnreadablePostError
def skip_unreadable_post(record):
@ -195,14 +186,93 @@ def skip_unreadable_post(record):
if isinstance(exc_value, UnreadablePostError):
return False
return True
LOGGING['filters']['skip_unreadable_posts'] = {
'()': 'django.utils.log.CallbackFilter',
'callback': skip_unreadable_post,
# Copied from DEFAULT_LOGGING as of Django 1.10.5 on 22 Feb 2017, and modified
# to incorporate html logging, invalid http_host filtering, and more.
# Changes from the default has comments.
# The Python logging flow is as follows:
# (see https://docs.python.org/2.7/howto/logging.html#logging-flow)
#
# Init: get a Logger: logger = logging.getLogger(name)
#
# Logging call, e.g. logger.error(level, msg, *args, exc_info=(...), extra={...})
# --> Logger (discard if level too low for this logger)
# (create log record from level, msg, args, exc_info, extra)
# --> Filters (discard if any filter attach to logger rejects record)
# --> Handlers (discard if level too low for handler)
# --> Filters (discard if any filter attached to handler rejects record)
# --> Formatter (format log record and emit)
#
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
#
'loggers': {
'django': {
'handlers': ['console', 'mail_admins'],
'level': 'INFO',
},
'django.server': {
'handlers': ['django.server'],
'level': 'INFO',
'propagate': False,
},
},
#
# No logger filters
#
'handlers': {
'console': {
'level': 'INFO',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
},
'django.server': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'django.server',
},
'mail_admins': {
'level': 'ERROR',
'filters': [
'require_debug_false',
'skip_suspicious_operations', # custom
'skip_unreadable_posts', # custom
],
'class': 'django.utils.log.AdminEmailHandler',
'include_html': True, # non-default
}
},
#
# All these are used by handlers
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
# custom filter, function defined above:
'skip_suspicious_operations': {
'()': 'django.utils.log.CallbackFilter',
'callback': skip_suspicious_operations,
},
# custom filter, function defined above:
'skip_unreadable_posts': {
'()': 'django.utils.log.CallbackFilter',
'callback': skip_unreadable_post,
},
},
# And finally the formatters
'formatters': {
'django.server': {
'()': 'django.utils.log.ServerFormatter',
'format': '[%(server_time)s] %(message)s',
}
},
}
LOGGING['handlers']['mail_admins']['filters'] += [ 'skip_unreadable_posts' ]
# End logging
# ------------------------------------------------------------------------