Skip to main content

A simple, zero-dependency lazy-initialization logging utility

Project description

lfp-logging

A simple, zero-dependency logging utility for Python that provides lazy-initialization and automatic configuration.

Features

  • Lazy Initialization: Logging is only configured when the first log message is actually handled. It uses a patching mechanism that stays out of the way until a log is emitted.
  • Automatic Name Discovery: Automatically determines logger names based on the caller's class, module, or file name.
  • Smart Default Handlers:
    • INFO messages are sent to stderr (along with all other levels) by default.
    • Detailed formatting including timestamps, levels, and line numbers.
  • ANSI Colors: Automatic color support for terminals, with overrides for popular IDEs (VSCode, PyCharm) and CI environments.
  • Explicit Override Support: If you call logging.basicConfig() yourself, lfp-logging will automatically back off and let your configuration take priority.
  • Flexible Configuration: Supports configuration via environment variables.
  • Multi-platform Support: Supports macOS (ARM/x64), Linux (ARM/x64), and Windows (x64/ARM).

Installation

You can install lfp-logging directly from GitHub using pip:

pip install git+https://github.com/regbo/lfp-logging-py.git

Or add it to your pyproject.toml dependencies:

dependencies = [
    "lfp_logging @ git+https://github.com/regbo/lfp-logging-py.git"
]

Quick Start

from lfp_logging import logger

# The logger name is automatically discovered as the class name "MyService"
class MyService:
    def __init__(self):
        self.log = logger()
    
    def do_something(self):
        self.log.info("Starting task...")
        self.log.warning("Something might be wrong.")

# You can specify one or more potential names. 
# The first valid name (non-empty, not "__main__") will be used.
log = logger(None, "__main__", "my_app")
log.info("Hello World!") # Uses "my_app"

Configuration

The logging level and formats can be controlled using environment variables.

Environment Variables

  • LOG_LEVEL: Set the global log level. Accepts names (e.g., DEBUG, INFO) or numeric values (e.g., 10, 20).
  • LOG_FORMAT: Custom log format string (standard Python logging format). (Default: %(asctime)s %(levelname)s %(name)s:%(lineno)d %(message)s)
  • LOG_FORMAT_DATE: Custom date format (default: %Y-%m-%d %H:%M:%S).
  • LOG_FORMAT_COLOR: Global ANSI color code for all levels (e.g., \x1b[32m for green).
  • LOG_FORMAT_COLOR_<LEVEL>: Level-specific ANSI color code (e.g., LOG_FORMAT_COLOR_DEBUG).
  • LOG_CONFIG_LAZY: Defer logging configuration until the first log message is emitted (default: false). Set to true, 1, yes, or on to enable. When set to false, logging is configured immediately when logger() is called.

Automatic Back-off

lfp-logging is designed to be non-intrusive:

  • Pre-existing Config: If you call logging.basicConfig() or otherwise configure the root logger before any lfp-logging activity, it will detect this and skip its own configuration.
  • Post-initialization Override: If you call logging.basicConfig() after lfp-logging has already configured itself, lfp-logging will automatically remove its default handler to allow your new configuration to take full effect.

System Arguments

The --log-level argument is no longer supported directly by the core configuration, but can be implemented by the user by setting the LOG_LEVEL environment variable before the first log call.

Development

This project uses uv for dependency management and pytest for testing.

Running Tests

uv run pytest

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

lfp_logging-0.0.9.tar.gz (7.5 kB view details)

Uploaded Source

Built Distribution

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

lfp_logging-0.0.9-py3-none-any.whl (8.9 kB view details)

Uploaded Python 3

File details

Details for the file lfp_logging-0.0.9.tar.gz.

File metadata

  • Download URL: lfp_logging-0.0.9.tar.gz
  • Upload date:
  • Size: 7.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for lfp_logging-0.0.9.tar.gz
Algorithm Hash digest
SHA256 6ac4ce0ced14dd480668d77481ea8aa4b9d93585987c5ed15c48e6518a275fd7
MD5 a337a58655f40606a3e0f77016120744
BLAKE2b-256 61b884e1b88561d758b07869b3da1b3a65c6415552f58a759cbb1ff23e8b8a9f

See more details on using hashes here.

Provenance

The following attestation bundles were made for lfp_logging-0.0.9.tar.gz:

Publisher: publish.yml on regbo/lfp-logging-py

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

File details

Details for the file lfp_logging-0.0.9-py3-none-any.whl.

File metadata

  • Download URL: lfp_logging-0.0.9-py3-none-any.whl
  • Upload date:
  • Size: 8.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for lfp_logging-0.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 74e7cba780bc5c799eb8a4a92df13feaf0f10bed18647cb1e4b2ec8713773ff4
MD5 558c02dbb39abc813fe343d3c420ae87
BLAKE2b-256 ffd635637dc4b0d2f299d6de833ef7e4a506ad77855e8496c28a7077f3b61e03

See more details on using hashes here.

Provenance

The following attestation bundles were made for lfp_logging-0.0.9-py3-none-any.whl:

Publisher: publish.yml on regbo/lfp-logging-py

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