Simple, powerful logging with built-in exception handling and YAML configuration
Project description
py-logex-enhanced
Simple, powerful logging with built-in exception handling and YAML configuration
py-logex-enhanced is a lightweight wrapper around loguru that adds YAML-based configuration and enhanced exception handling, making it perfect for production environments.
✨ Features
- 🚀 Zero Configuration - Works out of the box with sensible defaults
- 📝 YAML Configuration - Flexible, easy-to-read configuration files
- 🔍 Enhanced Exception Logging - See exactly where errors occur (file, line, function)
- 🎯 Multiple Loggers - Different log files for different components
- 📄 Auto-Discovery - Finds config files automatically
- 💡 Simple API - Just like loguru, but easier
- 🛠️ CLI Tools - Manage configurations from command line
📦 Installation
pip install py-logex-enhanced
Requirements:
- Python >= 3.8
- loguru >= 0.7.0
- pyyaml >= 6.0
🚀 Quick Start
Basic Usage
from py_logex import logger
# Simple logging
logger.info("Application started")
logger.debug("Debug information")
logger.warning("Warning message")
logger.error("Error occurred")
logger.success("Operation completed successfully")
# Exception handling with full traceback
try:
result = 10 / 0
except Exception as e:
logger.exception(e)
That's it! py-logex-enhanced automatically creates a logging.yaml config file and starts logging.
Exception Logging Output
When you use logger.exception(), you get detailed error information:
2024-12-26 10:30:45 | ERROR | main.py:process_data:23 - ZeroDivisionError: division by zero
Location: main.py:process_data:23
Code: result = 10 / 0
Traceback (most recent call last):
File "/app/main.py", line 23, in process_data
result = 10 / 0
ZeroDivisionError: division by zero
Multiple Loggers
from py_logex import get_logger
# Create different loggers for different components
app_logger = get_logger() # Logs to app.log
db_logger = get_logger("database") # Logs to database.log
api_logger = get_logger("api") # Logs to api.log
app_logger.info("Application started")
db_logger.debug("Database query executed")
api_logger.warning("API rate limit approaching")
⚙️ Configuration
Automatic Configuration
When you first import py-logex-enhanced, it automatically creates logging.yaml in your project root with sensible defaults:
logger:
file: "app.log"
level: "INFO"
rotation: "500 MB"
retention: "10 days"
compression: "zip"
format: "<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>"
console:
enabled: true
level: "INFO"
Custom Configuration
Create your own logging.yaml:
logger:
file: "myapp.log"
level: "DEBUG"
rotation: "100 MB"
retention: "7 days"
compression: "zip"
console:
enabled: true
level: "INFO"
# Named loggers for different components
loggers:
database:
file: "database.log"
level: "DEBUG"
rotation: "50 MB"
api:
file: "api.log"
level: "WARNING"
console:
enabled: false # Disable console output for this logger
Configuration Discovery
py-logex-enhanced finds your configuration automatically using this priority:
- Environment Variable:
PYLOGEX_CONFIG=/path/to/logging.yaml - Walk Up: Searches parent directories for
logging.yaml - Common Locations:
./config/logging.yaml,./src/config/logging.yaml, etc. - Create Default: Creates
logging.yamlin current directory
🛠️ CLI Tools
py-logex-enhanced includes command-line tools for managing configurations:
# Show current configuration
py_logex config show
# Create new configuration file
py_logex config init
# Create with custom name
py_logex config init -n myapp
# Force overwrite existing file
py_logex config init --force
# Validate configuration
py_logex config validate
# Validate specific file
py_logex config validate -c /path/to/logging.yaml
# Show version
py_logex version
📚 Examples
Check out the examples directory for more:
basic_usage.py
Simple logging examples showing all log levels and exception handling.
multiple_loggers.py
Using multiple loggers for different components of your application.
custom_config.py
Custom configurations and environment-specific setups.
🔧 Advanced Usage
Environment-Specific Configuration
import os
from pathlib import Path
from py_logex import get_logger
env = os.environ.get("ENVIRONMENT", "development")
config_file = f"./config/{env}-logging.yaml"
logger = get_logger(config_path=Path(config_file))
logger.info(f"Running in {env} mode")
Reconfiguring at Runtime
from py_logex import logger
from pathlib import Path
logger.info("Using original config")
# Switch to different config
logger.set_config(Path("./new_config.yaml"))
logger.info("Using new config")
Docker/Production Setup
# Dockerfile
ENV PYLOGEX_CONFIG=/app/config/production-logging.yaml
# app.py - no changes needed!
from py_logex import logger
logger.info("Production logging configured automatically")
Exception Logging with Context
from py_logex import logger
try:
user_id = 12345
process_payment(user_id, amount=100)
except Exception as e:
logger.exception(e, context={
"user_id": user_id,
"amount": 100,
"operation": "payment_processing"
})
🧪 Testing
# Install development dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run tests with coverage
pytest --cov=py_logex --cov-report=html
# Run specific test file
pytest tests/test_logger.py -v
# Run with verbose output
pytest -v
All tests are located in the tests/ directory and cover:
- Logger functionality
- Configuration discovery
- CLI commands
- Exception handling
🤝 Contributing
Contributions are welcome! Here's how you can help:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests (
pytest) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Development Setup
# Clone the repository
git clone https://github.com/sherozshaikh/py-logex.git
cd py-logex
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install in editable mode with dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Format code
black py_logex tests
# Run linting
flake8 py_logex tests
📖 Documentation
Configuration Options
| Option | Type | Default | Description |
|---|---|---|---|
file |
string | "app.log" |
Log file path |
level |
string | "INFO" |
Minimum log level |
rotation |
string | "500 MB" |
When to rotate log files |
retention |
string | "10 days" |
How long to keep old logs |
compression |
string | "zip" |
Compression format for old logs |
format |
string | See config | Log message format |
console.enabled |
boolean | true |
Enable console output |
console.level |
string | "INFO" |
Console log level |
Log Levels
TRACE- Very detailed debuggingDEBUG- Detailed debugging informationINFO- General information messagesSUCCESS- Success messagesWARNING- Warning messagesERROR- Error messagesCRITICAL- Critical error messages
🤔 Why py-logex-enhanced?
| Feature | Standard Logging | loguru | py-logex-enhanced |
|---|---|---|---|
| Simple API | ❌ | ✅ | ✅ |
| YAML Config | ❌ | ❌ | ✅ |
| Auto-discovery | ❌ | ❌ | ✅ |
| Exception Details | ❌ | ⚠️ | ✅ |
| Multiple Loggers | ⚠️ | ⚠️ | ✅ |
| Zero Config | ❌ | ⚠️ | ✅ |
| CLI Tools | ❌ | ❌ | ✅ |
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
- Built on top of the excellent loguru library
- Inspired by the need for simpler logging configuration in production environments
🐛 Bug Reports
Please report bugs on the GitHub Issues page.
When reporting a bug, please include:
- Python version
- py-logex-enhanced version
- Operating system
- Minimal code to reproduce the issue
- Expected behavior
- Actual behavior
💬 Support
- Documentation: GitHub README
- Issues: GitHub Issues
- PyPI: https://pypi.org/project/py-logex-enhanced/
- Email: shaikh.sheroz07@gmail.com
⭐ Show Your Support
If you find this project useful, please consider giving it a star on GitHub!
📊 Project Status
- Status: Active Development
- Version: 0.1.1
- Python: 3.8, 3.9, 3.10, 3.11, 3.12
- License: MIT
Made with ❤️ for the Python community
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
Built Distribution
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_logex_enhanced-0.1.1.tar.gz.
File metadata
- Download URL: py_logex_enhanced-0.1.1.tar.gz
- Upload date:
- Size: 21.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
33d52ab373a4036198f57c239f2cc3823676f305936a160de3774b9010610658
|
|
| MD5 |
276ac28884372d6627c577d95db0c565
|
|
| BLAKE2b-256 |
1c8493682551d90ccce45c7081d6af054f2d3c112d4405e63f9e0b73034fa48e
|
File details
Details for the file py_logex_enhanced-0.1.1-py3-none-any.whl.
File metadata
- Download URL: py_logex_enhanced-0.1.1-py3-none-any.whl
- Upload date:
- Size: 14.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
29905fde8b488fa12bfe7cf1fe377733e3e32b4e2f2d3c76dccf2c44c7d7f8f9
|
|
| MD5 |
5cc575be7667e0aa02464e8fe3609537
|
|
| BLAKE2b-256 |
ddcd00e353c4ece526b5bc7812f756cbde1be335020e3116affbfa223a44425b
|