Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

LogExtraCtx

This small humble library is for making logging extra parameters in logging a bit easier.

Rationale

I have blognote about it.

Usage

(look also into docstrings of modules and classes)

Pure python

Use getLogger from logextractx.logger, and then create local logger with local context:

from logextractx.logger import getLogger
logger = getLogger(__name__)
[...]
loclogger = logger.local(extra={'DATA_IN': 'CURRENT_CONTEXT'})

Eg:

from logextractx.logger import getLogger
logger = getLogger(__name__)


def send_message(environment: str, requester: str, recipient: str, text: str) -> bool:
    """ Function send_message sends MSG to the specified recipient.  """

    # extra data to be indexed
    loclogger = logger.local(extra={'ACTION_TYPE': 'SEND_MSG',
                                    'requester': requester,
                                    'recipient': recipient,
                                    'user': str(request.user),
                                    'environment': env_type})

    try:
        r = requests.post(settings.MSG_PROVIDER, json={'recipient': recipient, 'content': text},
                          ... < other params > ....)
        r.raise_for_status()
    except requests.exceptions.RequestException as e:
        loclogger.error('Sending MSG failed. Response text: "%s"', e)
        loclogger.debug("headers=%r", r.result.headers)
        return False
    loclogger.info('Sending MSG success.')
    return True

Django

To tie all log records with common request-id and session-id, do the following:

  • append logextractx.middleware.LogCtxDjangoMiddleware to your MIDDLEWARE in settings:
MIDDLEWARE = [
    [...]
     'django.contrib.sessions.middleware.SessionMiddleware',
    [...]
    'logextractx.middleware.LogCtxDjangoMiddleware',
 ]

And instead of logextractx.logger use logextractx.middleware so:

from logextractx.logger import getLogger
logger = getLogger(__name__)
[...]

Also, you need to add filter into logging

    'filters': {
        'RidFilter': {
            '()': 'logextractx.middleware.RidFilter'
        }
    }

And that's all. Now every log entry will contain request_id and session_id fields.

Django + DjHuey

If you want to also pass request/session-id to working Huey/DjHuey by such modifications:

Instead

from huey.contrib.djhuey import db_periodic_task, db_task, task

you should use

from logextractx.djhuey import db_periodic_task, db_task, task

If you do so, then all extra context, including request-id and session-id will be passed to logger on the Djhuey side.

Flask

LogExtraCtx in Flask is quite similar to usage in Django:

from logextractx.flask import init_logctx
from logextractx.middleware import getLogger
[...]

app = flask.Flask(__name__)
app.secret_key = "don't tell anyone"
init_logctx(app)

[...]

logger = getLogger(__name__)

Extra Formatter

If you use plain logging format, you may be interested in using logextractx.formatter.ExtraFormatter. Just add following in your formatter definition (DictConfig):

        'formatters': {
            'simple': {
                '()': 'logextractx.formatter.ExtraFormatter',
                'fmt': '%(levelname)s %(asctime)s %(name)s: %(message)s [%(extras)s]'
            }
        }

And then you will have all extra in single log line.

License:

Licensed under the Apache License, Version 2.0

Download files

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

Source Distribution

logextractx-0.3.0rc4.tar.gz (13.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

logextractx-0.3.0rc4-py3-none-any.whl (15.7 kB view details)

Uploaded Python 3

File details

Details for the file logextractx-0.3.0rc4.tar.gz.

File metadata

  • Download URL: logextractx-0.3.0rc4.tar.gz
  • Upload date:
  • Size: 13.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for logextractx-0.3.0rc4.tar.gz
Algorithm Hash digest
SHA256 e5aca378dad921736bf61cc56be5720b995e63d46f7a442bc282e69c8e605ea2
MD5 fe898b39cd5f78720d8e144bd99cbd46
BLAKE2b-256 d0c7755b709044a72c679147626165adb899bec6ac12a9074b2187341f8d52b6

See more details on using hashes here.

File details

Details for the file logextractx-0.3.0rc4-py3-none-any.whl.

File metadata

  • Download URL: logextractx-0.3.0rc4-py3-none-any.whl
  • Upload date:
  • Size: 15.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for logextractx-0.3.0rc4-py3-none-any.whl
Algorithm Hash digest
SHA256 f13c5291d1aa7db64002f1f636c1e4c785cc4685587dbb9714fb005fadb2ccf1
MD5 1e25bd91733402332d38f9df6660f058
BLAKE2b-256 f2c765b2a2288ebe0cf8fed424a76a64ebd260fb446189bc0a17f4d5d959fbb2

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.3.0rc4 This release

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page