Skip to main content

LOGGING EXTRAS

A collection of various python logging extensions.

Python PyPi Publish Python Builds codecov pre-commit Code style: black Documentation Status License: MIT

Documentation

https://logging-extras.readthedocs.io/en/latest/

Changelog

See CHANGELOG.rst for the release history.

Installation

Install logging-extras using pip

pip install logging-extras

Alternatively, download the latest binary or source package from github

Install wheel package with pip:

pip install logging_extras-{tags}.whl

Install source package as editable:

tar -xf logging-extras-{tags}.tar.gz
cd logging-extras-{tags}
pip install -e .

Please refer to documentation pages for available modules.

Module Index

config.YAMLConfig

YAMLConfig class can be used for loading YAML files with custom tags. This class adds a custom envvar tag to native YAML parser which is used to evaluate environment variables. Supports one or more environment variables in the form of ${VARNAME} or ${VARNAME:DEFAULT} within a string. If no default value is specified, empty string is used. Default values can only be treated as plain strings. YAMLConfig can also expand ~ or ~username just like shells do, either directly hardcoded in YAML file or passed through environment variables.

Example configuration:

File: logging.yaml

version: 1
formatters:
  simple:
    format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
handlers:
  console:
    class: logging.StreamHandler
    formatter: simple
    stream: ext://sys.stdout
  file_handler:
    class: logging.FileHandler
    filename: ${LOGGING_ROOT:.}/${LOG_FILENAME}
    formatter: simple
loggers:
  test_logger:
    level: DEBUG
    handlers:
      - file_handler
    propagate: no
root:
  level: NOTSET
  handlers:
    - console

Note: Ignore the backslashes as markdown must display those escape characters.

Example Usage

File: test_logger.py

import logging
from logging_.config import YAMLConfig

with open("logging.yaml", "r") as config_file:
    YAMLConfig(config_file.read(), silent=True)

# alternatively, you can use
# YAMLConfig.from_file("logging.yaml", silent=True)

logger = logging.getLogger("test_logger")

logger.debug("This is a debug log")
logger.info("This is an info log")
logger.warning("This is an warning log")
logger.error("This is an error log")
logger.critical("This is a critical log")

Note: An (optional) explicit silent=True flag must be set to suppress any file or parsing related exceptions to be thrown.

handlers.QueueListenerHandler

Note: On Python 3.12+, the standard library's logging.config.dictConfig supports queue logging natively (see Configuring QueueHandler and QueueListener), so users on 3.12+ can — and generally should — use the stdlib directly.

logging-extras's QueueListenerHandler is primarily a backport for Python 3.8 – 3.11 that provides the same end-to-end dictConfig-based queue setup on those older runtimes.

A simple queue-logging handler utilizing QueueListener for configured handlers (intentionally subclasses logging.Handler, not logging.handlers.QueueHandler, so Python 3.12+ dictConfig does not special-case construction). This is helpful for detaching the logger handlers from the main threads, which reduces the risk of getting blocked, for example, when using slower handlers such as smtp, file, or socket handlers.

Example configuration:

File: logging.yaml

version: 1
objects:
  queue:
    class: queue.Queue
    maxsize: 1000
formatters:
  simple:
    format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
handlers:
  console:
    class: logging.StreamHandler
    formatter: simple
    stream: ext://sys.stdout
  file_handler:
    class: logging.FileHandler
    filename: test_logger.log
    formatter: simple
  queue_handler:
    class: logging_.handlers.QueueListenerHandler
    handlers:
      - cfg://handlers.console
      - cfg://handlers.file_handler
    queue: cfg://objects.queue
loggers:
  test_logger:
    level: DEBUG
    handlers:
      - queue_handler
    propagate: no
root:
  level: NOTSET
  handlers:
    - console

Note: A queue object must be passed since the handler does not set a default queue implementation. Set maxsize: -1 to make the queue unlimited.

Example Usage

File: test_logger.py

import logging.config
import yaml

with open("logging.yaml", "r") as config_file:
    logging_config = yaml.safe_load(config_file.read())
    logging.config.dictConfig(logging_config)

logger = logging.getLogger("test_logger")

logger.debug("This is a debug log")
logger.info("This is an info log")
logger.warning("This is an warning log")
logger.error("This is an error log")
logger.critical("This is a critical log")

Development

Additional development and documentation dependencies can be installed using extras. It is recommended to use a virtualenv.

Use Pre-Commit Hooks

Install pre-commit hooks and dependencies:

pip install pre-commit
pre-commit install
pre-commit autoupdate
pre-commit run --all-files

Run Tests

Run tests from the source with Pytest:

pip install -e .[dev]
pytest -s

Generate Documentation

Generate documentation from the source with Sphinx:

pip install -e .[doc]
cd docs
mkdir -p _static _templates
make html
python -m http.server --directory build/html

No requirements.txt File

This is a python library package that is compatible with a wide range of Python versions. It does not make much sense to pin dependency versions in a traditional requirements.txt file. Instead, this project utilizes modern python packaging paradigms with pyproject.toml and setup.cfg files. However, sometimes some IDEs (i.e. PyCharm) cannot resolve dependencies without a requirements.txt file. To generate a requirements.txt file, simply run the following command within your venv:

pip freeze > requirements.txt

Create Distribution Packages

To create a source and wheel distribution, run:

git clone git@github.com:zobayer1/logging-extras.git
python -m pip install wheel
python setup.py clean sdist bdist_wheel

Note: This project uses setuptools-scm to generate build versions from git tags. Build system will raise errors if you are trying to build packages outside a git repo.

Download files

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

Source Distribution

logging_extras-1.0.0.tar.gz (20.4 kB view details)

Uploaded Source

Built Distribution

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

logging_extras-1.0.0-py3-none-any.whl (13.1 kB view details)

Uploaded Python 3

File details

Details for the file logging_extras-1.0.0.tar.gz.

File metadata

  • Download URL: logging_extras-1.0.0.tar.gz
  • Upload date:
  • Size: 20.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for logging_extras-1.0.0.tar.gz
Algorithm Hash digest
SHA256 6b52f699891b5261d971de8ff641507dd9f351ef3c7def79e45824cad89f625b
MD5 2f4eba9d1cc0b4fd63e592e853f2c975
BLAKE2b-256 7a8dc8f33ffef3173b32031db396f30905891d8864536938b093f63d5475b10b

See more details on using hashes here.

Provenance

The following attestation bundles were made for logging_extras-1.0.0.tar.gz:

Publisher: python-publish.yml on zobayer1/logging-extras

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file logging_extras-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: logging_extras-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 13.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for logging_extras-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 467553ac64660d9a4b926c261ae4782797cab5925b1860158337e7e8bee20cd9
MD5 452afae5ea9f4db609485daa7031499b
BLAKE2b-256 b28aa9a105d7b3634bd762965b57aa978b08b48351f9975356f3197be0f24e34

See more details on using hashes here.

Provenance

The following attestation bundles were made for logging_extras-1.0.0-py3-none-any.whl:

Publisher: python-publish.yml on zobayer1/logging-extras

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page