def test_extra_kv_custom_key(tracer): """ Test if setting a custom "extra_kv_key" of a OpenTracingHandler works """ operation_name = 'custom_extra_key' extra_kv_key = 'properties' logger_temp = logging.getLogger('CustomKey') logger_temp.setLevel(logging.DEBUG) logger_temp.addHandler( OpenTracingHandler(tracer=tracer, extra_kv_key=extra_kv_key)) with tracer.start_active_span(operation_name): logger_temp.info(LOG['message'], extra={ extra_kv_key: EXTRA_KV, 'kv': { 1: 'a', 2: 'b' }, 'my dict': { 'a': 1, 'b': 2 } }) check_finished_spans(tracer=tracer, operation_names_expected=[operation_name], logs_expected={operation_name: [LOG]})
def logger(tracer): """ Get a logger with an initialized OpenTracingHandler """ logger = logging.getLogger('Test') logger.setLevel(logging.DEBUG) # this fixture is called multiple times and we have to remove the handlers added from the previous fixture call logger.handlers.clear() logger.addHandler(OpenTracingHandler(tracer=tracer)) return logger
def test_pass_span_custom_key(tracer): """ Test is spans can be passed to the logging call under a custom key """ operation_name = 'pass_span_custom_key' span_key = 'spamspam' logger_temp = logging.getLogger('PassSpanCustom') logger_temp.setLevel(logging.DEBUG) logger_temp.addHandler(OpenTracingHandler(tracer=tracer, span_key=span_key)) with tracer.start_span(operation_name) as span: logger_temp.info(TEST_LOG['message'], extra={span_key: span}) check_finished_spans(tracer=tracer, operation_names_expected=[operation_name], logs_expected={operation_name: [TEST_LOG]})
def test_root_logger(caplog, tracer): """ Test root logger of logging """ handler = OpenTracingHandler(tracer=tracer) caplog.set_level(level=logging.DEBUG) logging.root.addHandler(handler) operation_name = 'my_active_span' with tracer.start_active_span(operation_name): logging.info(TEST_LOG['message']) check_finished_spans(tracer=tracer, operation_names_expected=[operation_name], logs_expected={operation_name: [TEST_LOG]}) logging.root.removeHandler(handler)
def test_custom_formats(tracer, kv_format, expected): """ Test custom formats of the OpenTracingFormatter """ operation_name = 'custom_formatter' logger = logging.getLogger('CustomFormatter') logger.setLevel(logging.DEBUG) # this test is called multiple times and we have to remove the handlers added from the previous function call logger.handlers.clear() formatter = OpenTracingFormatter(kv_format=kv_format) logger.addHandler(OpenTracingHandler(tracer=tracer, formatter=formatter)) with tracer.start_active_span(operation_name): logger.info(MESSAGE) check_finished_spans(tracer=tracer, operation_names_expected=[operation_name], logs_expected={operation_name: [expected]})
import logging from opentracing.mocktracer import MockTracer from logging_opentracing import OpenTracingHandler # initialize a mock tracer tracer = MockTracer() # prepare the logger logger = logging.getLogger('mylogger') logger.setLevel(logging.INFO) # create a new OpenTracing handler for the logging package handler = OpenTracingHandler(tracer=tracer) logger.addHandler(handler) # start an active span with tracer.start_active_span('hello-world'): # this log will be propagated to logger.info('Hello World from Python logging to OpenTracing') # retrieve the finished span finished_span = tracer.finished_spans()[0] # get the log line from log = finished_span.logs[0] # print the key_values of the log print(log.key_values) expected_output = "{'event': 'info', 'message': 'Hello World from Python logging to OpenTracing'}\n"
tracer = MockTracer() # prepare the logger logger = logging.getLogger('mylogger') logger.setLevel(logging.INFO) # create a new formatter with a custom format formatter = OpenTracingFormatter( kv_format={ 'event': '%(levelname_lower)s', 'message': '%(message)s', 'source': '%(filename)s:L%(lineno)d', }) # create a new OpenTracing handler which uses the custom formatter handler = OpenTracingHandler(tracer=tracer, formatter=formatter) logger.addHandler(handler) # start an active span with tracer.start_active_span('hello-world') as scope: # this log will be propagated to logger.info('Hello World from Python logging to OpenTracing') # retrieve the finished span finished_span = tracer.finished_spans()[0] # get the log line from log = finished_span.logs[0] # print the key_values of the log print(log.key_values)