Change default logging configuration (fixes #6922)
We only configure the root logger and 'django.db'. If DEBUG is True we see the root logger to DEBUG. We do not use Django default logging configuration by bypassing it using LOGGING_CONFIG = None[1]. * django_select2 logger is set to warning as the INFO level emit uninteresting messages * django.db logger is set to INFO, to prevent getting SQL queries when DEBUG is True. To get the SQL queries set DEBUG_DB to True in your settings. * Set a default logging configuration for the multitenant packaging * Add a RequestContextFilter logging filterto provide, usename, ip and a request ID to the formatter. * Use the new filter in default, debian and debian-multitenant settings. * Add a new setting DEBUG_DB for activating logging of SQL queries. [1]: https://www.caktusgroup.com/blog/2015/01/27/Django-Logging-Configuration-logging_config-default-settings-logger/
This commit is contained in:
parent
59f536e998
commit
c8e10def06
|
@ -24,10 +24,13 @@ LOGGING = {
|
|||
'cleaning': {
|
||||
'()': 'authentic2.utils.CleanLogMessage',
|
||||
},
|
||||
'request_context': {
|
||||
'()': 'authentic2.log_filters.RequestContextFilter',
|
||||
},
|
||||
},
|
||||
'formatters': {
|
||||
'syslog': {
|
||||
'format': '%(levelname)s %(name)s.%(funcName)s: %(message)s',
|
||||
'format': '%(ip)s %(user)s %(request_id)s %(levelname)s %(name)s.%(funcName)s: %(message)s',
|
||||
},
|
||||
},
|
||||
'handlers': {
|
||||
|
@ -35,35 +38,25 @@ LOGGING = {
|
|||
'level': 'DEBUG',
|
||||
'address': '/dev/log',
|
||||
'class': 'logging.handlers.SysLogHandler',
|
||||
'filters': ['cleaning'],
|
||||
'filters': ['cleaning', 'request_context'],
|
||||
'formatter': 'syslog',
|
||||
},
|
||||
},
|
||||
'loggers': {
|
||||
'py.warnings': {
|
||||
'handlers': ['syslog'],
|
||||
'level': 'WARNING',
|
||||
'propagate': False,
|
||||
},
|
||||
'django': {
|
||||
'handlers': ['syslog'],
|
||||
'level': 'WARNING',
|
||||
'propagate': False,
|
||||
},
|
||||
'lasso': {
|
||||
'handlers': ['syslog'],
|
||||
'level': 'WARNING',
|
||||
'propagate': False,
|
||||
},
|
||||
'authentic2': {
|
||||
# even when debugging seeing SQL queries is too much, activate it
|
||||
# explicitly using DEBUG_DB
|
||||
'django.db': {
|
||||
'handlers': ['syslog'],
|
||||
'level': 'INFO',
|
||||
'propagate': False,
|
||||
},
|
||||
'authentic2_idp_openid': {
|
||||
# django_select2 outputs debug message at level INFO
|
||||
'django_select2': {
|
||||
'handlers': ['syslog'],
|
||||
'level': 'WARNING',
|
||||
},
|
||||
'': {
|
||||
'handlers': ['syslog'],
|
||||
'level': 'INFO',
|
||||
'propagate': False,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
@ -66,5 +66,49 @@ DATABASE_ROUTERS = (
|
|||
'tenant_schemas.routers.TenantSyncRouter',
|
||||
)
|
||||
|
||||
LOGGING = {
|
||||
'version': 1,
|
||||
'disable_existing_loggers': True,
|
||||
'filters': {
|
||||
'cleaning': {
|
||||
'()': 'authentic2.utils.CleanLogMessage',
|
||||
},
|
||||
'request_context': {
|
||||
'()': 'authentic2.log_filters.RequestContextFilter',
|
||||
},
|
||||
},
|
||||
'formatters': {
|
||||
'syslog': {
|
||||
'format': '%(ip)s %(user)s %(request_id)s %(levelname)s %(name)s.%(funcName)s: %(message)s',
|
||||
},
|
||||
},
|
||||
'handlers': {
|
||||
'syslog': {
|
||||
'level': 'DEBUG',
|
||||
'address': '/dev/log',
|
||||
'class': 'logging.handlers.SysLogHandler',
|
||||
'filters': ['cleaning', 'request_context'],
|
||||
'formatter': 'syslog',
|
||||
},
|
||||
},
|
||||
'loggers': {
|
||||
# even when debugging seeing SQL queries is too much, activate it
|
||||
# explicitly using DEBUG_DB
|
||||
'django.db': {
|
||||
'handlers': ['syslog'],
|
||||
'level': 'INFO',
|
||||
},
|
||||
# django_select2 outputs debug message at level INFO
|
||||
'django_select2': {
|
||||
'handlers': ['syslog'],
|
||||
'level': 'WARNING',
|
||||
},
|
||||
'': {
|
||||
'handlers': ['syslog'],
|
||||
'level': 'INFO',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
if os.path.exists(os.path.join(ETC_DIR, 'config.py')):
|
||||
execfile(os.path.join(ETC_DIR, 'config.py'))
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
import logging
|
||||
|
||||
class RequestContextFilter(logging.Filter):
|
||||
DEFAULT_USERNAME = '-'
|
||||
DEFAULT_IP = '-'
|
||||
DEFAULT_REQUEST_ID = '-'
|
||||
|
||||
def filter(self, record):
|
||||
'''Add username, ip and request ID to the log record.
|
||||
|
||||
Inspired by django-log-request-id
|
||||
'''
|
||||
from . import middleware
|
||||
request = middleware.StoreRequestMiddleware.get_request()
|
||||
user = self.DEFAULT_USERNAME
|
||||
ip = self.DEFAULT_IP
|
||||
request_id = self.DEFAULT_REQUEST_ID
|
||||
if not request is None:
|
||||
if hasattr(request, 'user') and request.user.is_authenticated():
|
||||
user = unicode(request.user).encode('utf-8')
|
||||
ip = request.META['REMOTE_ADDR']
|
||||
request_id = request.request_id
|
||||
record.user = user
|
||||
record.ip = ip
|
||||
record.request_id = request_id
|
||||
return True
|
|
@ -1,3 +1,4 @@
|
|||
import logging.config
|
||||
# Load default from Django
|
||||
from django.conf.global_settings import *
|
||||
import os
|
||||
|
@ -16,6 +17,7 @@ SECRET_KEY = 'please-change-me-with-a-very-long-random-string'
|
|||
|
||||
# SECURITY WARNING: don't run with debug turned on in production!
|
||||
DEBUG = True
|
||||
DEBUG_DB = False
|
||||
TEMPLATE_DEBUG = True
|
||||
MEDIA = 'media'
|
||||
|
||||
|
@ -190,6 +192,7 @@ SERIALIZATION_MODULES = {
|
|||
if django.VERSION >= (1,7):
|
||||
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
|
||||
|
||||
LOGGING_CONFIG = None
|
||||
LOGGING = {
|
||||
'version': 1,
|
||||
'disable_existing_loggers': True,
|
||||
|
@ -197,10 +200,13 @@ LOGGING = {
|
|||
'cleaning': {
|
||||
'()': 'authentic2.utils.CleanLogMessage',
|
||||
},
|
||||
'request_context': {
|
||||
'()': 'authentic2.log_filters.RequestContextFilter',
|
||||
},
|
||||
},
|
||||
'formatters': {
|
||||
'verbose': {
|
||||
'format': '[%(asctime)s] %(levelname)s %(name)s.%(funcName)s: %(message)s',
|
||||
'format': '[%(asctime)s] %(ip)s %(user)s %(request_id)s %(levelname)s %(name)s.%(funcName)s: %(message)s',
|
||||
'datefmt': '%Y-%m-%d %a %H:%M:%S'
|
||||
},
|
||||
},
|
||||
|
@ -209,28 +215,24 @@ LOGGING = {
|
|||
'level': 'DEBUG',
|
||||
'class':'logging.StreamHandler',
|
||||
'formatter': 'verbose',
|
||||
'filters': ['cleaning', 'request_context'],
|
||||
},
|
||||
},
|
||||
'loggers': {
|
||||
'django': {
|
||||
'handlers': ['console'],
|
||||
'level': 'WARNING',
|
||||
'propagate': False,
|
||||
},
|
||||
'lasso': {
|
||||
'handlers': ['console'],
|
||||
'level': 'WARNING',
|
||||
'propagate': False,
|
||||
},
|
||||
'authentic2': {
|
||||
# even when debugging seeing SQL queries is too much, activate it
|
||||
# explicitly using DEBUG_DB
|
||||
'django.db': {
|
||||
'handlers': ['console'],
|
||||
'level': 'INFO',
|
||||
'propagate': False,
|
||||
},
|
||||
'authentic2_idp_openid': {
|
||||
# django_select2 outputs debug message at level INFO
|
||||
'django_select2': {
|
||||
'handlers': ['console'],
|
||||
'level': 'WARNING',
|
||||
},
|
||||
'': {
|
||||
'handlers': ['console'],
|
||||
'level': 'INFO',
|
||||
'propagate': False,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
@ -247,3 +249,10 @@ if 'AUTHENTIC2_SETTINGS_FILE' in os.environ:
|
|||
#
|
||||
|
||||
from . import fix_user_model
|
||||
|
||||
# Post local config setting
|
||||
if DEBUG:
|
||||
LOGGING['loggers']['']['level'] = 'DEBUG'
|
||||
if DEBUG_DB:
|
||||
LOGGING['loggers']['django.db']['level'] = 'DEBUG'
|
||||
logging.config.dictConfig(LOGGING)
|
||||
|
|
Loading…
Reference in New Issue