Projet

Général

Profil

0001-base-add-context-method-to-ProxyLogger-37491.patch

Benjamin Dauvergne, 28 novembre 2019 15:17

Télécharger (3,08 ko)

Voir les différences:

Subject: [PATCH] base: add context method to ProxyLogger (#37491)

It copies the logger and add contextual informations to the extra dictionary,
it overwrites keys from previous calls to context.
 passerelle/base/models.py | 10 +++++++---
 tests/test_proxylogger.py | 27 +++++++++++++++++++++++++++
 2 files changed, 34 insertions(+), 3 deletions(-)
passerelle/base/models.py
755 755

  
756 756

  
757 757
class ProxyLogger(object):
758

  
759
    def __init__(self, connector):
758
    def __init__(self, connector, extra=None):
760 759
        self.connector = connector
761 760
        self.appname = connector.get_connector_slug()
762 761
        self.slug = connector.slug
762
        self.extra = extra or {}
763 763
        logger_name = 'passerelle.resource.%s.%s' % (self.appname, self.slug)
764 764
        self._logger = logging.getLogger(logger_name)
765 765
        self._logger.setLevel(connector.log_level)
766 766

  
767
    def context(self, **kwargs):
768
        return self.__class__(self.connector, extra=dict(self.extra or {}, **kwargs))
769

  
767 770
    @property
768 771
    def level(self):
769 772
        return self._logger.getEffectiveLevel()
......
805 808
            attr['appname'] = self.appname
806 809
            attr['slug'] = self.slug
807 810

  
808
            extra = kwargs.get('extra', {})
811
            extra = (self.extra or {}).copy()
812
            extra.update(kwargs.get('extra', {}))
809 813
            request = extra.get('request')
810 814

  
811 815
            def is_json_serializable(value):
tests/test_proxylogger.py
229 229
    assert last_count4 == last_count3 + 1
230 230
    assert ResourceLog.objects.latest('id').level == 'info'
231 231
    assert ResourceLog.objects.latest('id').message == 'GET http://example.net/ (=> 200)'
232

  
233

  
234
def test_proxy_logger_context(db, connector):
235
    base_logger = ProxyLogger(connector)
236
    base_logger.debug('test')
237
    log = ResourceLog.objects.latest('id')
238
    assert log.extra == {}
239

  
240
    context1_logger = base_logger.context(extra1='toto')
241
    context1_logger.debug('test')
242
    log = ResourceLog.objects.latest('id')
243
    assert log.extra == {'extra1': 'toto'}
244

  
245
    # Check extra is updated not overwritten
246
    context2_logger = context1_logger.context(extra2='titi')
247
    context2_logger.debug('test')
248
    log = ResourceLog.objects.latest('id')
249
    assert log.extra == {'extra1': 'toto', 'extra2': 'titi'}
250

  
251
    # Check other logger were not modified
252
    context1_logger.debug('test')
253
    log = ResourceLog.objects.latest('id')
254
    assert log.extra == {'extra1': 'toto'}
255

  
256
    base_logger.debug('test')
257
    log = ResourceLog.objects.latest('id')
258
    assert log.extra == {}
232
-