Skip to main content

A high-performance, buffered, non-blocking logger for Python, implemented in Rust.

Project description

High-Performance Python Logger (in Rust)

PyPI version

A high-performance, buffered, non-blocking logger for Python, with the core logic implemented in Rust for maximum speed and efficiency.

This logger is designed for high-throughput applications where standard Python logging would become a bottleneck. It sends logs on a dedicated background thread, ensuring your application's main threads are never blocked by I/O.

Features

  • Non-Blocking: Log calls return instantly.
  • Batching: Logs are sent to destinations in efficient batches (Elastic bulk API).
  • Resilient: In-memory buffer with retries for when destinations are temporarily unavailable.
  • Multiple Outputs: Configure logging to stdout, files, and Elasticsearch simultaneously.
  • Python logging Integration: Includes a logging.Handler to seamlessly integrate with the standard library.

Requirements

  • Python 3.9+
  • pip version 21 or newer.

This package uses modern Python packaging standards (PEP 517). Older versions of pip may not be able to install it correctly. You can upgrade pip with the following command:

pip install --upgrade pip

Pre-compiled wheels for officially Supported Platforms

  • Linux: x86_64 (manylinux compatible)
  • macOS: arm64 (Apple Silicon)

Installation

pip install py-hpl-logger

Quick Start

  1. Configure your logger with ElasticConfig if needed:

    ELASTIC_HOST=localhost
    ELASTIC_PORT=9200
    ELASTIC_USERNAME=elastic
    ELASTIC_PASSWORD=changeme
    ELASTIC_INDEX=my-python-logs
    

    Configure using code:

    elastic_config = ElasticConfig(
        host="localhost",
        port=9200,
        index="my-app",
        username="elastic",
        password="changeme"
    )
    

    Configure using .env. You can choose .env search depth using local_only argument:

    elastic_config = ElasticConfig.from_env(local_only=False)
    
  2. Use the logger in your Python application:

    import logging
    from py_hpl_logger import LoggerBuilder, ElasticConfig, RustLogHandler
    
    # 1. Build the Rust logger backend once
    elastic_config = ElasticConfig(
        host="localhost",
        port=9200,
        index="my-app",
        username="elastic",
        password="changeme"
    )
    rust_backend = (
        LoggerBuilder()
        .with_stdout(True) # whether to use stdout or not
        .with_file_output("my_app_session")
        .with_elastic_output(elastic_config)
        .with_batch_size(1000) # how many log rows to wait before forced flush
        .with_flush_interval(1.0) # # how many seconds to wait before forced flush
        .build()
    )
    
    # 2. Integrate with Python's standard logging
    handler = RustLogHandler(rust_logger=rust_backend)
    formatter = logging.Formatter("%(threadName)s - %(message)s")
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    
    # 3. Use the standard logging API anywhere!
    log = logging.getLogger(__name__)
    log.info("This log is being handled by Rust!")
    log.error("This is a high-performance error log.")
    
    # 4. For graceful shutdown, flush the logger before exiting
    # (The logger also attempts to flush automatically on exit)
    rust_backend.flush()
    

License

This project is licensed under the MIT License.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

py_hpl_logger-0.1.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

py_hpl_logger-0.1.0-cp39-abi3-macosx_11_0_arm64.whl (1.9 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

File details

Details for the file py_hpl_logger-0.1.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for py_hpl_logger-0.1.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f423b67a6aeed4b33dd93ce2482389f9221fab99b868e6a74a1f75d5e4782556
MD5 d22f8538d9e8151815311b90dc9cc4c0
BLAKE2b-256 e4c9ddbceb9907cc5495c42f8326320b1c5f32a5f08c4be0e414b7cc3fbc3eb9

See more details on using hashes here.

File details

Details for the file py_hpl_logger-0.1.0-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for py_hpl_logger-0.1.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bf5e74006e8d5012af2baa9acc0f117403b717d4a88127422d7b40de153370c8
MD5 548e2be9ae00aa431656a3a41c7c801c
BLAKE2b-256 0d17b84777dabb4da2a57263d2c34636986cd3300c772eca016df96a5297d1a0

See more details on using hashes here.

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