def run(self): try: log_context.update(childField='titi') fields = log_context.as_dict() assert 'childField' in fields except (AssertionError, Exception): self.case.shm['thread_exc_info'] = sys.exc_info()
def context(): log_context.update(rid=42) yield log_context try: del log_context._stack except AttributeError: pass
def process_request(self, request): context.clear() extractor = settings.PYLOGCTX_REQUEST_EXTRACTOR try: context.update(**extractor(request)) except Exception: logger.exception()
def test_lazy_accessor_deepupdate_nested(context): log_context.remove('rid') from pylogctx import LazyAccessor class MyObject(object): value = 'foo' def __repr__(self): return 'foo' instance = MyObject() lazy_instance = LazyAccessor(instance, 'value') log_context.update(parent={"lazy_instance": lazy_instance, "foo": "bar"}) fields = log_context.as_dict() assert str(fields['parent']['lazy_instance']) == 'foo' # Check value change for LazyAccessor instance.value = 'bar' fields = log_context.as_dict() assert str(fields['parent']['lazy_instance']) == 'bar'
def test_adapter_with_parameters(context): from pylogctx import log_adapter class Parent(object): pass class Child(Parent): pass @log_adapter(Parent) def parent_log_maker(instance, with_child=False): fields = dict(parent=id(instance)) if with_child: fields.update({"child": {'baby2': 'tutu'}}) return fields log_context.update(child={'baby1': 'toto'}) with context.cm_update_one(Child(), with_child=True): data = context.as_dict() assert 'parent' in data assert 'child' in data assert 'baby1' in data['child'] assert 'baby2' in data['child'] context.update_one(Child(), with_child=True) data = context.as_dict() assert 'parent' in data assert 'child' in data assert 'baby1' in data['child'] assert 'baby2' in data['child']
def test_update_clear_remove(context): log_context.update(myField='toto', myOtherField='titi') fields = log_context.as_dict() assert 'myField' in fields assert 'myOtherField' in fields log_context.remove('myOtherField') fields = log_context.as_dict() assert 'myField' in fields assert 'myOtherField' not in fields log_context.clear() fields = log_context.as_dict() assert 'myField' not in fields
def test_deep_update_dict(context): log_context.remove('rid') # Value to dict update override log_context.update(myField={'toto': {'tata1': {'titi1': 'tutu'}}}) fields = log_context.as_dict() assert fields == {'myField': {'toto': {'tata1': {'titi1': 'tutu'}}}} # Update tata1 to add titi2 log_context.update(myField={'toto': {'tata1': {'titi2': 'tutu'}}}) fields = log_context.as_dict() assert fields == { 'myField': { 'toto': { 'tata1': { 'titi1': 'tutu', 'titi2': 'tutu' } } } } # Override value `tata1/titi1` log_context.update(myField={'toto': {'tata1': {'titi1': 'val'}}}) fields = log_context.as_dict() assert fields == { 'myField': { 'toto': { 'tata1': { 'titi1': 'val', 'titi2': 'tutu' } } } }
def test_adapter(): from pylogctx import context, log_adapter # To fill save context context.update(toto="tata") fields = context.as_dict() assert 'toto' in fields app = Celery(task_cls='pylogctx.celery.LoggingTask') @log_adapter(app.Task) def adapter(task): return { 'celeryTaskId': task.request.id, 'celeryTask': task.name } @app.task def my_task(): return context.as_dict() result = my_task.apply() if VERSION.major < 4: result.maybe_reraise() else: result.maybe_throw() fields = result.result assert 'celeryTask' in fields assert 'celeryTaskId' in fields # Check context is the same before task was started fields = context.as_dict() assert 'toto' in fields context.clear() # Clear context
def test_deep_update_dict(context): log_context.remove('rid') # Value to dict update override log_context.update(myField={'toto': {'tata1': {'titi1': 'tutu'}}}) fields = log_context.as_dict() assert fields == {'myField': {'toto': {'tata1': {'titi1': 'tutu'}}}} # Update tata1 to add titi2 log_context.update(myField={'toto': {'tata1': {'titi2': 'tutu'}}}) fields = log_context.as_dict() assert fields == { 'myField': {'toto': {'tata1': {'titi1': 'tutu', 'titi2': 'tutu'}}}} # Override value `tata1/titi1` log_context.update(myField={'toto': {'tata1': {'titi1': 'val'}}}) fields = log_context.as_dict() assert fields == { 'myField': {'toto': {'tata1': {'titi1': 'val', 'titi2': 'tutu'}}}}
def my_task(): context.update(taskField='RUNNED') logger = get_task_logger(current_task().name) logger.info("I log!") return context.as_dict()
def before_call(self): from pylogctx import context context.update(taskField='RUNNED')
def my_task(): context.update(taskField='RUNNED') logger = get_task_logger(current_task.name) logger.info("I log!") return context.as_dict()
def process_request(self, request): context.clear() try: context.update(request) except AdapterNotFound: logger.info("Can't adapt %s for log.", request.__class__.__name__)