Skip to main content

NoLogTears is a simple extension of Python's built-in logging library, designed to make logging easier, more efficient, and headache-free—no more tears over log management.

Project description

no log tears

Latest Version Python Supported Versions MyPy Strict Test Coverage Downloads GitHub stars

I personally found the built-in logging library to be a bit messy to use, so I created this library. Now, logging is easy, and there are no more tears!

Features

  • easy to configure: set up logging via environment variables or a configuration file (thanks to pydantic-settings).
  • extended base configuration:
    • predefined configuration: use built-in formatters and handlers or create your own.
    • customizable default configuration with environment variables: e.g. LOGGING__LEVEL=INFO and your process will log at the INFO level. Or LOGGING__FORMATTER=verbose to use the predefined verbose formatter.
    • capture python warnings: log warnings.warn messages to the logger.
  • mixins: easily add logging to your classes.
    • LoggerMixin: adds _logger property to your instance and adds self to log records (instance hex id).
    • LoggableMixin: converts instance to string based on logging level of the class.
    • LogMixin: adds a _log to your class and allows you to bind additional context to loggers with _log_extra method.
  • log context: easily bind additional context to loggers.
  • traceback limit: Set the number of stack frames to display in log messages.

Dependencies

  • python 3.9+

Optional:

  • pydantic
  • pydantic-settings

Installation

pip install no-log-tears

Usage

Simple logging (execute python script with LOGGING__LEVEL=INFO environment variable):

from no_log_tears import get_logger

log = get_logger(__name__)
log.info("Hello, world!")
# Output: `2025-02-19 20:42:28,928 INFO    __main__                                           Hello, world!`

Set up logging with a configuration file:

# logging.yaml
root:
  level: INFO
  handlers: [ console ]
handlers:
  console:
    formatter: custom
    stream: ext://sys.stdout
formatters:
  custom:
    (): no_log_tears.formatters.SoftFormatter
    fmt: '%(asctime)s %(levelname)s %(message)s %(my_field)s %(__other__)s'
# automatically loads logging configuration from `logging.yaml` on import
from no_log_tears import get_logger

log = get_logger(__name__)
log.info("Hello, world!", my_field="my_value", my_other_field="my_other_value")
# Output: `2025-02-19 20:42:28,928 INFO Hello, world! my_value {'my_other_field': 'my_other_value'}`

Use the LogMixin class to easily log messages with additional context:

from no_log_tears import LogMixin


class MyClass(LogMixin):
    def __init__(self, my_field: str) -> None:
        self.__my_field = my_field

    def do_stuff(self, foo: str) -> str:
        # bind `foo` value to the logger
        log = self._log(foo=foo)

        # log a message with `foo` value
        log.debug("Doing stuff ...")

        spam = foo + ":eggs"
        log = log(spam=spam)

        # log a message with `foo`, `spam` and `magic` values
        log.info("Stuff done!", magic="Yes!")

        return spam

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

no_log_tears-0.2.0.tar.gz (13.3 kB view details)

Uploaded Source

Built Distribution

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

no_log_tears-0.2.0-py3-none-any.whl (15.9 kB view details)

Uploaded Python 3

File details

Details for the file no_log_tears-0.2.0.tar.gz.

File metadata

  • Download URL: no_log_tears-0.2.0.tar.gz
  • Upload date:
  • Size: 13.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for no_log_tears-0.2.0.tar.gz
Algorithm Hash digest
SHA256 5efc69731ae0f732bb1d427e314d3fd316f923743e3f86bae69cff5e7e91cec4
MD5 f5e4c03f8398f938a85c25fd61553296
BLAKE2b-256 81cbce3dfe1be0192eee0c7610877d1374478f12bfb5264995e7469af243f29d

See more details on using hashes here.

Provenance

The following attestation bundles were made for no_log_tears-0.2.0.tar.gz:

Publisher: publish.yaml on zerlok/no-log-tears

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

File details

Details for the file no_log_tears-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: no_log_tears-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 15.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for no_log_tears-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 58663e5f259ef1960cab6e90c36e7cc262a7975c58cac36da8c74f2f5d62859c
MD5 339ac6ff18364a948e3d4fb15541a66d
BLAKE2b-256 400ee46f0c04986e044a308f69ea2900c42ba823964932a57b5860fc5aae6de0

See more details on using hashes here.

Provenance

The following attestation bundles were made for no_log_tears-0.2.0-py3-none-any.whl:

Publisher: publish.yaml on zerlok/no-log-tears

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

Supported by

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