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:
parent
49af9b4e1a
commit
c4cdb82a39
104
ietf/settings.py
104
ietf/settings.py
|
@ -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
|
||||
# ------------------------------------------------------------------------
|
||||
|
|
Loading…
Reference in a new issue