Skip to main content

Jaeger Logger Reporter

Project description

Jaeger Logger Reporter

This packages enables a way to log your span in a simple way. It provides a LoggerReporter with some configurations. But enables a way to create custom logger reporters.

It extends the jaeger-client packages, change the configuration in a way it's possible use customer logger reporters.

Installation

Running the following command:

$ pip install jaeger-logger-reporter

Usage

It's very similar to the jaeger-client, the only difference will be the configuration.

import time
import logging
import sys
from jaeger_logger_reporter import LoggerTraceConfig, LoggerTracerReporter


if __name__ == "__main__":

    config = LoggerTraceConfig(
        config={
            'sampler': {
                'type': 'const',
                'param': 1,
            },
            'local_agent': {
                'reporting_host': 'localhost',
                'reporting_port': '5775',
            },
            'logging': True,
            'max_tag_value_length': sys.maxsize
        },
        service_name='test',
        validate=True,
    )

    # setup my logger (optional)
    tracer_logger = logging.getLogger('my.logger')
    tracer_logger.setLevel(logging.DEBUG)
    handler = logging.StreamHandler()
    formatter = logging.Formatter(
        '[%(levelname)s][%(date)s] %(name)s %(span)s %(event)s %(message)s')
    handler.setFormatter(formatter)
    handler.setLevel(logging.DEBUG)
    tracer_logger.addHandler(handler)

    # define the logger to use, by default LoggerTracerReporter but can be changed.
    tracer = config.initialize_tracer(
        logger_reporter=LoggerTracerReporter(logger=tracer_logger))

    with tracer.start_span('TestSpan') as span:
        span.log_kv({'event': 'test message', 'life': 42})

        with tracer.start_span('ChildSpan', child_of=span) as child_span:
            child_span.log_kv({'event': 'down below'})

    # yield to IOLoop to flush the spans - https://github.com/jaegertracing/jaeger-client-python/issues/50
    time.sleep(2)
    tracer.close()  # flush any buffered spans

It will produce a logger output similar to:

2020-10-13T22:37:02.538850
[INFO][2020-10-13T22:37:02.538850] my.logger [TestSpan] STARTED
INFO:my.logger:
2020-10-13T22:37:02.538918
[INFO][2020-10-13T22:37:02.538918] my.logger [TestSpan][ChildSpan] STARTED
INFO:my.logger:
2020-10-13T22:37:02.538924
[DEBUG][2020-10-13T22:37:02.538924] my.logger [TestSpan][ChildSpan] LOG down below
DEBUG:my.logger:down below
2020-10-13T22:37:02.538940
[INFO][2020-10-13T22:37:02.538940] my.logger [TestSpan][ChildSpan] FINISHED  2.2172927856445312e-05s
INFO:my.logger: 2.2172927856445312e-05s
2020-10-13T22:37:02.538887
[DEBUG][2020-10-13T22:37:02.538887] my.logger [TestSpan] LOG test message 42
DEBUG:my.logger:test message 42
2020-10-13T22:37:02.538985
[INFO][2020-10-13T22:37:02.538985] my.logger [TestSpan] FINISHED  0.00013494491577148438s
INFO:my.logger: 0.00013494491577148438s

LoggerTracerReporter

LoggerTracerReporter have some configurations.

Span identifier

By default the span it's identifier by operation_name eg:

[get_user]

But can be changed:

def span_identifier(span):
    return f'**{span}**'

...
tracer = config.initialize_tracer(
    logger=LoggerTracerReporter(span_identifier=span_identifier))

And the output will be something like:

**79408c731416c394:55150307c2aa6ca8:0:1 test.TestSpan**

Note: if the span has a parent the parent identifier will be display before the span identifier:

[parent_id][span_id]

Logger formatter

The logger follows this formatter:

'%(levelname)s][%(date)s] %(name)s %(span)s %(event)s %(message)s'

Where:

  • levelname is the log level of message;
  • date is the time of event;
  • name is the logger name;
  • span is the span identifier;
  • event is the span event
  • message is the message of the log

The logger can be overrider on LoggerTracerReporterinstaciation.

Span life cycle

Defined tags

There are some Tags keys defined. Can be used to improve the log quality:

  • LOG_HTTP_METHOD
  • LOG_HTTP_URL
  • LOG_HTTP_STATUS_CODE
  • LOG_SPAN_ERROR
  • LOG_SPAN_HTML_DATA
  • LOG_SPAN_HTML_RESPONSE
  • LOG_SPAN_SERIALIZER_RESPONSE

Events

There's some different events types:

STARTED

Identify the start of the event. It will show:

  • date of the begin of the span
  • LOG_HTTP_METHOD and LOG_HTTP_URL if exist, as a message

TAG

Represent a value of a span tag (log_level = DEBUG)

LOG

Represent a value of a log_kv (log_level = DEBUG)`

FINISHED

Identify the end of the event. It will show:

  • date of the end of the span
  • LOG_HTTP_STATUS_CODE if exist, and the duration fo the span as a message

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jaeger_logger_reporter-0.0.7.tar.gz (6.8 kB view details)

Uploaded Source

Built Distribution

jaeger_logger_reporter-0.0.7-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

Details for the file jaeger_logger_reporter-0.0.7.tar.gz.

File metadata

  • Download URL: jaeger_logger_reporter-0.0.7.tar.gz
  • Upload date:
  • Size: 6.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.5

File hashes

Hashes for jaeger_logger_reporter-0.0.7.tar.gz
Algorithm Hash digest
SHA256 165397f40a6d386e4aa866324027148e3a7ae8006bdd63a8e491b9928487eb8f
MD5 2da802b48e99be49b9c97e7e1d7a0ebd
BLAKE2b-256 de82bae237693b7bc5c690dbc2ab7c6fe20ef3bb3036d706f87ebca496eb0964

See more details on using hashes here.

File details

Details for the file jaeger_logger_reporter-0.0.7-py3-none-any.whl.

File metadata

  • Download URL: jaeger_logger_reporter-0.0.7-py3-none-any.whl
  • Upload date:
  • Size: 10.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.5

File hashes

Hashes for jaeger_logger_reporter-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 101745caf20fff2d8f985708e74fe95cc216dc87f59a248b369051a1501c20ee
MD5 842ba48e1b0992354c3d91ad7c47a848
BLAKE2b-256 645432d05122ee928fbfeff6de5031d112797f9ff3389122c68594d6525c1a78

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page