Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Loghive - Distributed Logger 🚀

A robust, scalable Python logging library that enables distributed log collection with advanced connection management, automatic reconnection, and thread-safe logging capabilities. 🌟


Core Components 🛠️

1. LoggerClient 📝

  • 🧵 Thread-safe logging client with automatic reconnection
  • ⏳ Exponential backoff retry mechanism
  • 🩺 Connection health monitoring
  • 📨 Durable message delivery

2. Consumer 🛡️

  • ⚙️ Scalable message consumption
  • 📦 Batch processing capabilities
  • 🔄 Error handling and recovery
  • 💻 Multi-threaded architecture

Features ✨

Logger Client Features 🔧

  • Thread-Safe Operations:
    • 🔒 Thread-safe logging with mutex locks
    • 👥 Concurrent access handling
    • ✅ Safe connection management
  • Robust Connection Management:
    • 🔄 Automatic reconnection with exponential backoff
    • 🩺 Connection health monitoring
    • ⏱️ Configurable heartbeat (600 seconds)
    • ⏳ Connection timeout protection (300 seconds)
    • 🕒 Socket timeout (10 seconds)
  • Reliable Message Delivery:
    • 📜 Durable message queues
    • 💾 Message persistence
    • ✅ Delivery confirmation
    • 🔁 Automatic retry on failure
  • Flexible Log Routing:
    • 🛠️ Service-specific routing
    • 📊 Log level-based queues
    • 🧩 Dynamic queue declaration
    • 🔗 Direct exchange support

Consumer Features 🛡️

  • Advanced Message Queue Management:
    • ⏳ Configurable message TTL (7 days default) - Messages automatically expire after a set time period to prevent queue overflow.
    • 📏 Maximum queue length limits - Set hard limits on queue size to protect system resources and maintain performance.
    • 💪 Backpressure handling - Automatically manages message flow when the system is under heavy load to prevent crashes.
  • Scalable Processing:
    • 🧵 Multi-threaded message processing - Parallel processing of messages across multiple threads for improved throughput.
    • 📦 Batch processing support - Groups messages into batches for efficient bulk processing and reduced database load.
    • ⚙️ Configurable worker pool - Adjust the number of worker threads based on your system's capacity and requirements.
  • Error Recovery:
    • 📥 Failure backoff queue - Stores failed messages separately for retry with exponential backoff to prevent system overload.
    • 🔁 Automatic retry mechanism - Intelligently retries failed operations with configurable attempts and delays.
    • ✅ JSON validation - Ensures message integrity by validating JSON structure before processing to prevent data corruption.

Installation 🛠️

pip install loghive

Usage 📖

Configuration file setup

Create a config.env file for the service to fetch the connection parameters for rabbitmq, rabbitmq and email connection

# Basic Configurations
LOG_LEVEL=DEBUG

# Database Configurations
POSTGRES_DB_HOST=localhost
POSTGRES_DB_USER=***
POSTGRES_DB_NAME=***
POSTGRES_DB_PASSWORD=***
POSTGRES_DB_PORT=***

# RabbitMQ & Consumer Configurations
QUEUE_HOST=localhost
QUEUE_USER=***
QUEUE_PASSWORD=***
QUEUE_PORT=***
QUEUE_MAX_SIZE=10000000

# Consumer
CONSUMER_BATCH_SIZE=1000

# Monitoring
ENABLE_EMAIL_MONITORING=False
EMAIL_HOST=***
EMAIL_PORT=***
EMAIL_SENDER_EMAIL=***
EMAIL_SENDER_PASSWORD=***

Logger Client Setup 📝

from loghive.logger.rabbitmqlogger import LoggerClient

# Initialize the logger
logger = LoggerClient(
    service_name="my-service",
    rabbitmq_url="amqp://localhost:5672/"
)

# Log messages with different levels
logger.log("INFO", "User logged in", {"user_id": "123"})
logger.log("ERROR", "Database connection failed", {"retry_count": 3})
logger.log("WARNING", "High memory usage", {"usage_percent": 85})

Consumer

from loghive.consumer.rabbitmqconsumer import start_consumer
from loghive.main.settings import internal_logger

try:
    start_consumer(["flask_service"])  # replace with your service names
except Exception as e:
    internal_logger.error(f"Error faced while starting consumer: {e}")

The internal_logger can be imported from loghive.main.settings, this will be behave like a normal logger and will not be publishing the message to rabbitmq.

Message Structure 📦

{
  "service": "service_name",
  "level": "INFO",
  "message": "Log message",
  "information": {
    "# Additional context as dictionary"
  },
  "timestamp": "2024-12-27 10:30:45"
}

Connection Configuration ⚙️

connection_params = {
    "heartbeat": 600,  # Heartbeat interval in seconds
    "blocked_connection_timeout": 300,  # Connection timeout in seconds
    "socket_timeout": 10,  # Socket timeout in seconds
}

Queue Settings 📜

QUEUE_ARGUMENTS = {
    "x-message-ttl": 604800000,  # 7 days in milliseconds
    "x-max-length": 1000000,  # Maximum queue size
}

Architecture 🏗️

Logger Client Architecture 🖇️

+----------------+     +------------------+     +----------------+
|  Application   |     |   LoggerClient   |     |   RabbitMQ    |
|    Code        | --> | - Thread Safety  | --> |   Exchange    |
|                |     | - Auto Reconnect |     |   (Direct)    |
+----------------+     | - Retry Logic    |     +----------------+
                      +------------------+

Message Flow 🔄

1. Application generates log
   ↓
2. LoggerClient validates and formats message
   ↓
3. Thread-safe connection check
   ↓
4. Publish with retry mechanism
   ↓
5. RabbitMQ confirms delivery
   ↓
6. Consumer processes message

Error Handling ⚠️

Logger Client Error Recovery 🛡️

  1. 🔄 Connection failures trigger automatic reconnection
  2. ⏳ Exponential backoff between retry attempts (1-30 seconds)
  3. 🚫 Maximum of 3 retry attempts per operation
  4. 🩺 Separate monitoring thread for connection health
  5. 🔒 Thread-safe operation handling

Message Delivery Guarantees ✅

  • 📜 Durable queues and exchanges
  • 💾 Persistent messages (delivery_mode=2)
  • ✅ Message acknowledgment
  • 🛠️ Automatic queue declaration
  • 🔄 Connection recovery

Best Practices ✅

  1. Initialization:
logger = LoggerClient(
    service_name="unique-service-name",
    rabbitmq_url="amqp://username:password@host:port/vhost"
)
  1. Graceful Shutdown:
# Always close the logger when done
logger.close()
  1. Error Handling:
try:
    # Your application code
    logger.log("INFO", "Operation successful")
except Exception as e:
    logger.log("ERROR", "Operation failed", {"error": str(e)})
  1. Structured Logging:
logger.log(
    "INFO",
    "User action completed",
    {
        "user_id": "123",
        "action": "checkout",
        "duration_ms": 150
    }
)

Monitoring 📊

The logger provides built-in monitoring for:

  • 🩺 Connection status
  • ✅ Message delivery success/failure
  • 🔁 Retry attempts
  • 📜 Queue health
  • 🧵 Thread status

Performance Considerations ⚡

  • 🧵 Thread-safe operations may impact throughput
  • 🩺 Connection monitoring adds minimal overhead
  • 🔁 Retry mechanisms prevent message loss
  • ⏱️ Heartbeat monitoring ensures connection health
  • 🚫 Socket timeouts prevent hanging operations

Contributing 🤝

See our Contributing Guide for details on how to contribute to this project.


License 📜

This project is licensed under the MIT License - see the LICENSE file for details.


Support 💬

For issues and help:

  1. 📖 Check the documentation
  2. 🔍 Review existing issues
  3. 📝 Create a new issue with detailed reproduction steps

Metadata

Release files for loghive 1.0.0b1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for loghive 1.0.0b1
File Size Uploaded
loghive-1.0.0b1.tar.gz 22.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for loghive 1.0.0b1
File Interpreter ABI Platform
loghive-1.0.0b1-py3-none-any.whl Python 3 none any Details

Total release size: 46.3 kB

Release files / loghive-1.0.0b1.tar.gz

Download URL loghive-1.0.0b1.tar.gz
Size 22.5 kB
Tags Source
SHA-256 checksum
How to use checksums
384b47f11f7a7dfbc9c6a8db0acce8acda3c94847ce39c96fe88de20dd41581d
BLAKE2b-256 checksum
How to use checksums
8bdf940be7d8d40d2020592d3f89c5ed7545e4013da66a2c8a0d1c0a44280020
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.13.0

Release files / loghive-1.0.0b1-py3-none-any.whl

Download URL loghive-1.0.0b1-py3-none-any.whl
Size 23.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d25c71fbc5c7ecab6a2d2e1438c01ac3127f2030efb85bfdc5ae6fcc7b63509f
BLAKE2b-256 checksum
How to use checksums
4235bbe465b48c7709d54fe779a9ef26706c0634f19b6f083c233dec76a095cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.13.0

Release history Release notifications | RSS feed

This release

1.0.0b1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page