Skip to main content

A collection of useful logging tools

Project description

logging_extras

A collection of useful logging tools for Python 3.

Installation

The majority of the tools in this library require no additional dependencies. To install the library with the base functionality use the following command.

pip install logging-extras

To use the MQTT* classes, install the library with the following command.

pip install logging-extras[mqtt]

Tools

  • MQTThandler - A logging handler that publishes logs to an MQTT broker.
  • RelativeTimeFilter - A logging filter that adds a relative time to the log record.
  • DiffTimeFilter - A logging filter that adds a time difference to the log record.
  • TieredFormatter - A logging formatter that allows for different formatting based on the log level.
  • log_function_call - A decorator that logs the arguments and return value of a function call.

Upcomming tools:

  • MQTTSubscriber - A logging listener that subscribes to an MQTT broker and logs messages.

Examples

MQTThandler

import logging

from paho.mqtt.client import Client
from logger_extras import MQTTConfig, MQTThandler

handler = MQTThandler(
    host="localhost",
    topic="logs",
    append_logger_name=True,
)
handler.setFormatter(logging.Formatter("%(levelname)s - %(message)s)"))

logger = logging.getLogger(__name__)
logger.addHandler(handler)
logger.setLevel(logging.INFO)

logger.info("Hello World!")

# This will publish the following message to the MQTT broker on the topic "logs/__main__":
# {
#   "timestamp": 1690226241.740354,
#   "message": "INFO - Hello World!",
#   "raw_message": "Hello World!",
#   "level": "INFO", "name": "__main__"
# }

RelativeTimeFilter

import logging
from time import sleep

from logger_extras import RelativeTimeFilter

handler = logging.StreamHandler()
relative_time_filter = RelativeTimeFilter()
handler.addFilter(relative_time_filter)
handler.setFormatter(logging.Formatter("%(reltime).3f - %(message)s"))

logger = logging.getLogger(__name__)
logger.addHandler(handler)
logger.setLevel(logging.INFO)

logger.info("Hello World!")
sleep(2)
logger.info("Hello World!")
relative_time_filter.reset_time_reference()
sleep(1)
logger.info("Hello World!")

# This will log the following:
# 0:00:00 - Hello World!
# 0:00:02 - Hello World!
# 0:00:01 - Hello World!

DiffTimeFilter

import logging
from time import sleep

from logger_extras import DiffTimeFilter

handler = logging.StreamHandler()
handler.addFilter(DiffTimeFilter())
handler.setFormatter(logging.Formatter("%(difftime).3f - %(message)s"))

logger = logging.getLogger(__name__)
logger.addHandler(handler)
logger.setLevel(logging.INFO)

logger.info("Hello World!")
sleep(2)
logger.info("Hello World!")
sleep(1)
logger.info("Hello World!")

# This will log the following:
# 0:00:00 - Hello World!
# 0:00:02 - Hello World!
# 0:00:01 - Hello World!

TieredFormatter

import logging

from logger_extras import TieredFormatter

handler = logging.StreamHandler()
handler.setFormatter(
    TieredFormatter(
        fmt="%(levelname)s - %(message)s",
        level_fmts={
            logging.DEBUG: "%(levelname)s - %(funcName)s:%(lineno)d - %(message)s",
            logging.INFO: "%(message)s",
        },
        datefmt=None,
        style="%",
        validate=True,
    )
)

logger = logging.getLogger(__name__)
logger.addHandler(handler)
logger.setLevel(logging.INFO)

logger.debug("Hello World!")
logger.info("Hello World!")
logger.warning("Hello World!")
logger.error("Hello World!")
logger.critical("Hello World!")

# This will log the following:
# DEBUG - __main__:19 - Hello World!
# Hello World!
# WARNING - Hello World!
# ERROR - Hello World!
# CRITICAL - Hello World!

log_function_call

from logger_extras import log_function_call

@log_function_call(level=logging.INFO)
def add(a, b):
    return a + b

_ = add(1, 2)
# This will log the following:
# 2021-08-03 12:00:00,000 - INFO - Calling __main__.add(a=1, b=2)
# 2021-08-03 12:00:00,000 - INFO - '__main__.add' returned 3

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

logger_extras-0.3.3.tar.gz (10.9 kB view details)

Uploaded Source

Built Distribution

logger_extras-0.3.3-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

Details for the file logger_extras-0.3.3.tar.gz.

File metadata

  • Download URL: logger_extras-0.3.3.tar.gz
  • Upload date:
  • Size: 10.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.4

File hashes

Hashes for logger_extras-0.3.3.tar.gz
Algorithm Hash digest
SHA256 b52b55998eff0814b60460386f0fcc043c93d29f65b4fb78555d3756dbf305ab
MD5 0b142abea2c0ffdf9bfb7f70d4695316
BLAKE2b-256 5b87c0401777d3d4a904549fd61502bd51de2ea9fdefdb2fc9f976e749620dcd

See more details on using hashes here.

Provenance

File details

Details for the file logger_extras-0.3.3-py3-none-any.whl.

File metadata

File hashes

Hashes for logger_extras-0.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 1a1dd7e85b0ef81d81d247961a5208ab5d67c09d2b196f221b63665b622cf5ef
MD5 ea05ad182338a55ad31137d70243c612
BLAKE2b-256 13361b0b13325a5e0fca1a18b3475be9390fa4380b389bcabd63890ff3dce454

See more details on using hashes here.

Provenance

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