A high-performance, buffered, non-blocking logger for Python, implemented in Rust.
Project description
High-Performance Python Logger (in Rust)
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
loggingIntegration: Includes alogging.Handlerto seamlessly integrate with the standard library.
Requirements
- Python 3.9+
pipversion 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(manylinuxcompatible) - macOS:
arm64(Apple Silicon)
Installation
pip install py-hpl-logger
Quick Start
1(Optional). Configure your logger with ElasticConfig if needed:
```ini
ELASTIC_HOST=localhost
ELASTIC_PORT=9200
ELASTIC_USERNAME=elastic
ELASTIC_PASSWORD=changeme
ELASTIC_INDEX=my-python-logs
```
Configure using code:
```python
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:
```python
elastic_config = ElasticConfig.from_env(local_only=False)
```
-
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file py_hpl_logger-0.1.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: py_hpl_logger-0.1.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 2.2 MB
- Tags: CPython 3.9+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
954a1ced56a6412ac39316e24bceecceac0b1ea20b8508df08503f53282aa1ef
|
|
| MD5 |
7bae18ee4489d22290547cadb507bac2
|
|
| BLAKE2b-256 |
a28b56ebea36b4d6cf768495ed8ced33adffb837dd840ed3a56ef2f456376afc
|
File details
Details for the file py_hpl_logger-0.1.2-cp39-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: py_hpl_logger-0.1.2-cp39-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.9+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f0462a7b459776ec38277884db1075e39f3bb402082719f240b791df6f823e03
|
|
| MD5 |
76dc15881224bd7878f330e15be4bf09
|
|
| BLAKE2b-256 |
ca2fe8072db2dd8bf2e38ead9a51a711ee661fab3ec99ee6611e8549246c280e
|