Skip to content
prathamagrawalPublic

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Latest commit

Β 

History

47 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

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

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages