0001-logger-add-truncated-session_id-to-log-lines-15579.patch
debian/debian_config_common.py | ||
---|---|---|
46 | 46 | |
47 | 47 |
DEBUG_LOG_PATH = '/var/log/%s/debug' % PROJECT_NAME |
48 | 48 |
DEBUG_LOG_FORMAT = ( |
49 |
'%(asctime)s \x1f%(tenant)s \x1f%(ip)s \x1f%(user)r \x1f%(request_id)s \x1f' |
|
49 |
'%(asctime)s \x1f%(tenant)s \x1f%(ip)s \x1f%(user)r \x1f%(session_id)s \x1f%(request_id)s \x1f'
|
|
50 | 50 |
'%(levelname)s \x1f%(name)s \x1f%(message)s' |
51 | 51 |
) |
52 | 52 |
DEBUG_PROVISIONNING_LOG_PATH = '/var/log/%s/provisionning-debug' % PROJECT_NAME |
... | ... | |
80 | 80 |
}, |
81 | 81 |
'formatters': { |
82 | 82 |
'syslog': { |
83 |
'format': '%(application)s %(levelname)s %(tenant)s %(ip)s %(user)s %(request_id)s' |
|
83 |
'format': '%(application)s %(levelname)s %(tenant)s %(ip)s %(user)s %(session_id)s %(request_id)s'
|
|
84 | 84 |
' %(message)s', |
85 | 85 |
}, |
86 | 86 |
'debug': { |
hobo/logger.py | ||
---|---|---|
48 | 48 |
DEFAULT_USER_DISPLAY_NAME = '-' |
49 | 49 |
DEFAULT_USER_UUID = '-' |
50 | 50 |
DEFAULT_APPLICATION = 'django' |
51 |
DEFAULT_SESSION_ID = '-' |
|
51 | 52 | |
52 | 53 |
def filter(self, record): |
53 | 54 |
"""Add username, ip and request ID to the log record. |
... | ... | |
89 | 90 |
record.ip = self.DEFAULT_IP |
90 | 91 |
record.path = self.DEFAULT_PATH |
91 | 92 |
record.request_id = self.DEFAULT_REQUEST_ID |
93 |
record.session_id = self.DEFAULT_SESSION_ID |
|
92 | 94 |
if request is not None and hasattr(request, 'META'): |
93 | 95 |
record.ip = request.META.get('REMOTE_ADDR', self.DEFAULT_IP) |
94 | 96 |
record.path = request.get_full_path() |
95 | 97 |
record.request_id = 'r:' + hex(id(request))[2:].upper() |
98 |
if hasattr(request, 'session') and getattr(request.session, '_session_key', None): |
|
99 |
record.session_id = 's:' + request.session._session_key[:4] |
|
96 | 100 | |
97 | 101 |
# populate user attributes |
98 | 102 |
record.user_name = self.DEFAULT_USER_NAME |
... | ... | |
193 | 197 |
if accum: |
194 | 198 |
yield cursor, accum |
195 | 199 | |
196 |
keys = ['tenant', 'ip', 'user', 'request_id', 'level', 'logger'] |
|
200 |
keys = ['tenant', 'ip', 'user', 'session_id', 'request_id', 'level', 'logger']
|
|
197 | 201 | |
198 | 202 |
def _parse(self, cursor=0): |
199 | 203 |
for cursor, line in self._pre_lines(cursor=cursor): |
tests_multitenant/test_logger.py | ||
---|---|---|
19 | 19 |
import logging.config |
20 | 20 |
import time |
21 | 21 | |
22 |
import mock |
|
22 | 23 |
import pytest |
23 | 24 |
import pytz |
24 | 25 |
from tenant_schemas.utils import tenant_context |
... | ... | |
76 | 77 |
def test_debug_log(tenants, settings, app, rf, debug_log, freezer): |
77 | 78 |
freezer.move_to('2020-4-20') |
78 | 79 |
request = rf.get('/path/') |
80 |
request.session = mock.Mock(_session_key='12345678') |
|
79 | 81 |
debug_log.info('test %s is ok', 1, extra={'request': request, 'tenant': 'yes'}) |
80 | 82 |
lines = list(DebugLog.lines()) |
81 | 83 |
assert len(lines) == 0 |
... | ... | |
90 | 92 |
assert len(lines) == 2 |
91 | 93 |
request_id = hex(id(request))[2:].upper() |
92 | 94 |
assert lines[0] == { |
93 |
'cursor': 111,
|
|
95 |
'cursor': 119,
|
|
94 | 96 |
'ip': '127.0.0.1', |
95 | 97 |
'request_id': 'r:' + request_id, |
98 |
'session_id': 's:1234', |
|
96 | 99 |
'message': 'log 2 is \nok', |
97 | 100 |
'level': 'INFO', |
98 | 101 |
'tenant': 'tenant1.example.net', |
99 |
- |