Projet

Général

Profil

0001-logger-add-truncated-session_id-to-log-lines-15579.patch

Benjamin Dauvergne, 12 janvier 2022 20:10

Télécharger (4,03 ko)

Voir les différences:

Subject: [PATCH] logger: add truncated session_id to log lines (#15579)

 debian/debian_config_common.py   | 4 ++--
 hobo/logger.py                   | 6 +++++-
 tests_multitenant/test_logger.py | 5 ++++-
 3 files changed, 11 insertions(+), 4 deletions(-)
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
-