0003-Change-default-logging-configuration-fixes-6922.patch
debian-wheezy/debian_config.py | ||
---|---|---|
19 | 19 | |
20 | 20 |
LOGGING = { |
21 | 21 |
'version': 1, |
22 | 22 |
'disable_existing_loggers': True, |
23 | 23 |
'filters': { |
24 | 24 |
'cleaning': { |
25 | 25 |
'()': 'authentic2.utils.CleanLogMessage', |
26 | 26 |
}, |
27 |
'request_context': { |
|
28 |
'()': 'authentic2.log_filters.RequestContextFilter', |
|
29 |
}, |
|
27 | 30 |
}, |
28 | 31 |
'formatters': { |
29 | 32 |
'syslog': { |
30 |
'format': '%(levelname)s %(name)s.%(funcName)s: %(message)s', |
|
33 |
'format': '%(ip)s %(user)s %(request_id)s %(levelname)s %(name)s.%(funcName)s: %(message)s',
|
|
31 | 34 |
}, |
32 | 35 |
}, |
33 | 36 |
'handlers': { |
34 | 37 |
'syslog': { |
35 | 38 |
'level': 'DEBUG', |
36 | 39 |
'address': '/dev/log', |
37 | 40 |
'class': 'logging.handlers.SysLogHandler', |
38 |
'filters': ['cleaning'], |
|
41 |
'filters': ['cleaning', 'request_context'],
|
|
39 | 42 |
'formatter': 'syslog', |
40 | 43 |
}, |
41 | 44 |
}, |
42 | 45 |
'loggers': { |
43 |
'py.warnings': { |
|
46 |
# even when debugging seeing SQL queries is too much, activate it |
|
47 |
# explicitly using DEBUG_DB |
|
48 |
'django.db': { |
|
44 | 49 |
'handlers': ['syslog'], |
45 |
'level': 'WARNING', |
|
46 |
'propagate': False, |
|
47 |
}, |
|
48 |
'django': { |
|
49 |
'handlers': ['syslog'], |
|
50 |
'level': 'WARNING', |
|
51 |
'propagate': False, |
|
50 |
'level': 'INFO', |
|
52 | 51 |
}, |
53 |
'lasso': { |
|
52 |
# Django select2 output |
|
53 |
'django_select2': { |
|
54 | 54 |
'handlers': ['syslog'], |
55 | 55 |
'level': 'WARNING', |
56 |
'propagate': False, |
|
57 |
}, |
|
58 |
'authentic2': { |
|
59 |
'handlers': ['syslog'], |
|
60 |
'level': 'INFO', |
|
61 |
'propagate': False, |
|
62 | 56 |
}, |
63 |
'authentic2_idp_openid': {
|
|
57 |
'': { |
|
64 | 58 |
'handlers': ['syslog'], |
65 | 59 |
'level': 'INFO', |
66 |
'propagate': False, |
|
67 | 60 |
}, |
68 | 61 |
}, |
69 | 62 |
} |
70 | 63 | |
71 | 64 |
# Old settings method |
72 | 65 |
def extract_settings_from_environ(): |
73 | 66 |
import os |
74 | 67 |
import json |
debian-wheezy/multitenant/debian_config.py | ||
---|---|---|
61 | 61 |
'NAME': PROJECT_NAME.replace('-', '_') |
62 | 62 |
} |
63 | 63 |
} |
64 | 64 | |
65 | 65 |
DATABASE_ROUTERS = ( |
66 | 66 |
'tenant_schemas.routers.TenantSyncRouter', |
67 | 67 |
) |
68 | 68 | |
69 |
LOGGING = { |
|
70 |
'version': 1, |
|
71 |
'disable_existing_loggers': True, |
|
72 |
'filters': { |
|
73 |
'cleaning': { |
|
74 |
'()': 'authentic2.utils.CleanLogMessage', |
|
75 |
}, |
|
76 |
'request_context': { |
|
77 |
'()': 'authentic2.log_filters.RequestContextFilter', |
|
78 |
}, |
|
79 |
}, |
|
80 |
'formatters': { |
|
81 |
'syslog': { |
|
82 |
'format': '%(ip)s %(user)s %(request_id)s %(levelname)s %(name)s.%(funcName)s: %(message)s', |
|
83 |
}, |
|
84 |
}, |
|
85 |
'handlers': { |
|
86 |
'syslog': { |
|
87 |
'level': 'DEBUG', |
|
88 |
'address': '/dev/log', |
|
89 |
'class': 'logging.handlers.SysLogHandler', |
|
90 |
'filters': ['cleaning', 'request_context'], |
|
91 |
'formatter': 'syslog', |
|
92 |
}, |
|
93 |
}, |
|
94 |
'loggers': { |
|
95 |
# even when debugging seeing SQL queries is too much, activate it |
|
96 |
# explicitly using DEBUG_DB |
|
97 |
'django.db': { |
|
98 |
'handlers': ['syslog'], |
|
99 |
'level': 'INFO', |
|
100 |
}, |
|
101 |
# django_select2 outputs debug message at level INFO |
|
102 |
'django_select2': { |
|
103 |
'handlers': ['syslog'], |
|
104 |
'level': 'WARNING', |
|
105 |
}, |
|
106 |
'': { |
|
107 |
'handlers': ['syslog'], |
|
108 |
'level': 'INFO', |
|
109 |
}, |
|
110 |
}, |
|
111 |
} |
|
112 | ||
69 | 113 |
if os.path.exists(os.path.join(ETC_DIR, 'config.py')): |
70 | 114 |
execfile(os.path.join(ETC_DIR, 'config.py')) |
src/authentic2/log_filters.py | ||
---|---|---|
1 |
import logging |
|
2 | ||
3 |
class RequestContextFilter(logging.Filter): |
|
4 |
DEFAULT_USERNAME = '-' |
|
5 |
DEFAULT_IP = '-' |
|
6 |
DEFAULT_REQUEST_ID = '-' |
|
7 | ||
8 |
def filter(self, record): |
|
9 |
'''Add username, ip and request ID to the log record. |
|
10 | ||
11 |
Inspired by django-log-request-id |
|
12 |
''' |
|
13 |
from . import middleware |
|
14 |
request = middleware.StoreRequestMiddleware.get_request() |
|
15 |
user = self.DEFAULT_USERNAME |
|
16 |
ip = self.DEFAULT_IP |
|
17 |
request_id = self.DEFAULT_REQUEST_ID |
|
18 |
if not request is None: |
|
19 |
if hasattr(request, 'user') and request.user.is_authenticated(): |
|
20 |
user = unicode(request.user).encode('utf-8') |
|
21 |
ip = request.META['REMOTE_ADDR'] |
|
22 |
request_id = request.request_id |
|
23 |
record.user = user |
|
24 |
record.ip = ip |
|
25 |
record.request_id = request_id |
|
26 |
return True |
src/authentic2/settings.py | ||
---|---|---|
1 |
import logging.config |
|
1 | 2 |
# Load default from Django |
2 | 3 |
from django.conf.global_settings import * |
3 | 4 |
import os |
4 | 5 | |
5 | 6 |
import django |
6 | 7 | |
7 | 8 |
from . import plugins |
8 | 9 | |
... | ... | |
11 | 12 |
### Quick-start development settings - unsuitable for production |
12 | 13 |
# See https://docs.djangoproject.com/en/dev/howto/deployment/checklist/ |
13 | 14 | |
14 | 15 |
# SECURITY WARNING: keep the secret key used in production secret! |
15 | 16 |
SECRET_KEY = 'please-change-me-with-a-very-long-random-string' |
16 | 17 | |
17 | 18 |
# SECURITY WARNING: don't run with debug turned on in production! |
18 | 19 |
DEBUG = True |
20 |
DEBUG_DB = False |
|
19 | 21 |
TEMPLATE_DEBUG = True |
20 | 22 |
MEDIA = 'media' |
21 | 23 | |
22 | 24 |
# See https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts |
23 | 25 |
ALLOWED_HOSTS = [] |
24 | 26 | |
25 | 27 |
DATABASES = { |
26 | 28 |
'default': { |
... | ... | |
185 | 187 |
SERIALIZATION_MODULES = { |
186 | 188 |
'json': 'authentic2.serializers', |
187 | 189 |
} |
188 | 190 | |
189 | 191 |
# Set Test runner to remove warning about test suite initialized with Django < 1.6 |
190 | 192 |
if django.VERSION >= (1,7): |
191 | 193 |
TEST_RUNNER = 'django.test.runner.DiscoverRunner' |
192 | 194 | |
195 |
LOGGING_CONFIG = None |
|
193 | 196 |
LOGGING = { |
194 | 197 |
'version': 1, |
195 | 198 |
'disable_existing_loggers': True, |
196 | 199 |
'filters': { |
197 | 200 |
'cleaning': { |
198 | 201 |
'()': 'authentic2.utils.CleanLogMessage', |
199 | 202 |
}, |
203 |
'request_context': { |
|
204 |
'()': 'authentic2.log_filters.RequestContextFilter', |
|
205 |
}, |
|
200 | 206 |
}, |
201 | 207 |
'formatters': { |
202 | 208 |
'verbose': { |
203 |
'format': '[%(asctime)s] %(levelname)s %(name)s.%(funcName)s: %(message)s', |
|
209 |
'format': '[%(asctime)s] %(ip)s %(user)s %(request_id)s %(levelname)s %(name)s.%(funcName)s: %(message)s',
|
|
204 | 210 |
'datefmt': '%Y-%m-%d %a %H:%M:%S' |
205 | 211 |
}, |
206 | 212 |
}, |
207 | 213 |
'handlers': { |
208 | 214 |
'console': { |
209 | 215 |
'level': 'DEBUG', |
210 | 216 |
'class':'logging.StreamHandler', |
211 | 217 |
'formatter': 'verbose', |
218 |
'filters': ['cleaning', 'request_context'], |
|
212 | 219 |
}, |
213 | 220 |
}, |
214 | 221 |
'loggers': { |
215 |
'django': { |
|
222 |
# even when debugging seeing SQL queries is too much, activate it |
|
223 |
# explicitly using DEBUG_DB |
|
224 |
'django.db': { |
|
216 | 225 |
'handlers': ['console'], |
217 |
'level': 'WARNING', |
|
218 |
'propagate': False, |
|
226 |
'level': 'INFO', |
|
219 | 227 |
}, |
220 |
'lasso': { |
|
228 |
# django_select2 outputs debug message at level INFO |
|
229 |
'django_select2': { |
|
221 | 230 |
'handlers': ['console'], |
222 | 231 |
'level': 'WARNING', |
223 |
'propagate': False, |
|
224 |
}, |
|
225 |
'authentic2': { |
|
226 |
'handlers': ['console'], |
|
227 |
'level': 'INFO', |
|
228 |
'propagate': False, |
|
229 | 232 |
}, |
230 |
'authentic2_idp_openid': {
|
|
233 |
'': { |
|
231 | 234 |
'handlers': ['console'], |
232 | 235 |
'level': 'INFO', |
233 |
'propagate': False, |
|
234 | 236 |
}, |
235 | 237 |
}, |
236 | 238 |
} |
237 | 239 | |
238 | 240 |
# Temporary fix for User.username field length |
239 | 241 |
MIGRATION_MODULES = { |
240 | 242 |
'auth': 'authentic2.auth_migrations', |
241 | 243 |
} |
... | ... | |
247 | 249 |
if 'AUTHENTIC2_SETTINGS_FILE' in os.environ: |
248 | 250 |
execfile(os.environ['AUTHENTIC2_SETTINGS_FILE']) |
249 | 251 | |
250 | 252 |
# |
251 | 253 |
# Apply monkey patches |
252 | 254 |
# |
253 | 255 | |
254 | 256 |
from . import fix_user_model |
257 | ||
258 |
# Post local config setting |
|
259 |
if DEBUG: |
|
260 |
LOGGING['loggers']['']['level'] = 'DEBUG' |
|
261 |
if DEBUG_DB: |
|
262 |
LOGGING['loggers']['django.db']['level'] = 'DEBUG' |
|
263 |
logging.config.dictConfig(LOGGING) |
|
255 |
- |