docs: Add logging implementation summary

This commit is contained in:
Alexis Bruneteau 2025-11-07 03:07:32 +01:00
parent 7b9d6d0407
commit 99ec83dd0c

View File

@ -0,0 +1,415 @@
# Backend Logging Implementation - Summary
## What Was Added
Comprehensive structured logging throughout the backend to help understand what's happening and debug issues.
### New Files
1. **`backend/logging_config.py`** (85 lines)
- Centralized logging configuration
- Colored output with emojis
- Custom formatter for better readability
- Log level management by module
### Modified Files
1. **`backend/main.py`**
- Enhanced startup logging
- Shows initialization progress
- Logs errors with full details
- Uses colored logging
2. **`backend/init_blockchain.py`**
- Detailed blockchain initialization logging
- Shows elections loaded from database
- Reports election recording progress
- Displays verification status
- Counts new vs. skipped elections
3. **`backend/services.py`**
- Logs election creation
- Shows blockchain recording status
- Reports block hash and number
- Includes error details
## What Gets Logged
### Startup Sequence
```
🚀 Starting E-Voting Backend
========================================
📦 Initializing database...
✓ Database initialized successfully
⛓️ Initializing blockchain...
✓ Recorded election 1 (Election Présidentielle 2025)
Block #0, Hash: 7f3e9c2b..., Candidates: 4
✓ Blockchain initialization completed
✓ Backend initialization complete, starting FastAPI app
========================================
```
### Blockchain Operations
```
------------------------------------------------------------
Blockchain Initialization Started
------------------------------------------------------------
Found 1 elections in database
Blockchain currently has 0 elections
✓ Recorded election 1 (Election Présidentielle 2025)
Block #0, Hash: 7f3e9c2b..., Candidates: 4
Recording summary: 1 new, 0 skipped
Verifying blockchain integrity (1 blocks)...
✓ Blockchain integrity verified successfully
------------------------------------------------------------
Blockchain Initialization Complete
Total blocks: 1
Chain valid: true
------------------------------------------------------------
```
### Election Creation
```
✓ Election 1 recorded to blockchain (Block #0, Hash: 7f3e9c2b...)
```
### Errors
```
❌ Database initialization failed: ConnectionError: Can't connect to database
⚠️ Blockchain initialization failed (non-fatal): ValueError: Invalid election data
🔥 Critical failure: SystemError: Database corrupted
```
## Logging Features
### Emoji Prefixes
- 🔍 DEBUG - Detailed diagnostic information
- INFO - General informational messages
- ⚠️ WARNING - Warning messages (non-fatal)
- ❌ ERROR - Error messages
- 🔥 CRITICAL - Critical failures
### Color Coding
- Cyan for DEBUG
- Green for INFO
- Yellow for WARNING
- Red for ERROR
- Magenta for CRITICAL
### Information Included
- Timestamp (YYYY-MM-DD HH:MM:SS)
- Logger module name
- Log level
- Formatted message
- Full exception stack trace on errors
## How to Use
### View Backend Logs
```bash
# View all backend logs
docker compose -f docker-compose.multinode.yml logs -f backend-node-1
# Search for blockchain operations
docker compose logs backend-node-1 | grep -i blockchain
# Search for errors
docker compose logs backend-node-1 | grep "❌\|✗"
# Get last 50 lines
docker compose logs backend-node-1 --tail 50
```
### Interpret Logs
**Healthy startup:**
```
✓ Database initialized successfully
✓ Blockchain initialization completed
✓ Backend initialization complete
```
**Database issue:**
```
❌ Database initialization failed: Can't connect to 'localhost:3306'
```
**Blockchain issue:**
```
Found 1 elections in database
Blockchain currently has 0 elections
✓ Recorded election 1 to blockchain
✓ Blockchain integrity verified successfully
```
**Already initialized:**
```
⊘ Election 1 already on blockchain
Recording summary: 0 new, 1 skipped
```
## Benefits
### For Debugging
- ✓ See exactly what's happening at startup
- ✓ Identify exactly where failures occur
- ✓ Full stack traces for exceptions
- ✓ Database connection status
- ✓ Blockchain recording progress
### For Monitoring
- ✓ Track initialization time
- ✓ Monitor election recording
- ✓ Verify blockchain integrity
- ✓ Watch performance metrics
- ✓ Detect unusual patterns
### For Operations
- ✓ Understand system health
- ✓ Troubleshoot issues faster
- ✓ Verify configuration
- ✓ Track error rates
- ✓ Historical logs for analysis
## Log Levels and What They Mean
### DEBUG (🔍)
```
🔍 Recording election 1 (Election Présidentielle 2025) to blockchain
🔍 Found 4 candidates for election 1
```
**When to use:** Detailed info for developers. Not in production logs by default.
### INFO ()
```
Found 1 elections in database
✓ Recorded election 1 to blockchain
✓ Blockchain integrity verified successfully
```
**When to use:** Important events and successes. Normal operation.
### WARNING (⚠️)
```
⚠️ Blockchain initialization failed (non-fatal): Database busy
```
**When to use:** Something unexpected but not critical. System continues.
### ERROR (❌)
```
❌ Database initialization failed: ConnectionError
```
**When to use:** Something failed that needs attention. May cause issues.
### CRITICAL (🔥)
```
🔥 Failed to start FastAPI app
```
**When to use:** System cannot continue. Immediate action needed.
## Configuration
**File:** `backend/logging_config.py`
### Default Levels
```python
'backend': INFO # General backend operations
'backend.blockchain_elections': DEBUG # Detailed blockchain info
'backend.init_blockchain': INFO # Initialization
'backend.services': INFO # Service operations
'backend.main': INFO # Main startup
```
### Suppress Verbose Loggers
```python
'sqlalchemy.engine': WARNING # Don't log SQL queries
'sqlalchemy.pool': WARNING # Don't log pool events
'uvicorn': INFO # Minimal Uvicorn logs
'uvicorn.access': WARNING # Don't log access requests
```
### Customize
To change logging in `logging_config.py`:
```python
def setup_logging(level=logging.INFO):
# Make blockchain more verbose
logging.getLogger('backend.blockchain_elections').setLevel(logging.DEBUG)
# Make services less verbose
logging.getLogger('backend.services').setLevel(logging.WARNING)
```
## Docker Integration
### Multi-Node Setup
Each backend node logs independently:
```bash
# Node 1
docker compose logs backend-node-1
# Node 2
docker compose logs backend-node-2
# Node 3
docker compose logs backend-node-3
# All
docker compose logs
```
### View Logs in Real-Time
```bash
# Follow logs as they appear
docker compose logs -f backend-node-1
# Stop with Ctrl+C
```
### Export Logs
```bash
# Save to file
docker compose logs backend-node-1 > backend.log
# Search exported logs
grep "Error\|blockchain" backend.log
```
## Troubleshooting Examples
### Example 1: 502 Bad Gateway
**What to check:**
```bash
docker compose logs backend-node-1 | head -50
```
**Look for:**
```
❌ Database initialization failed
└─ ConnectionError: Can't connect to 'mariadb:3306'
```
**Fix:** Start MariaDB: `docker compose up -d mariadb`
---
### Example 2: No Elections on Blockchain
**What to check:**
```bash
docker compose logs backend-node-1 | grep blockchain
```
**Look for:**
```
Found 0 elections in database
└─ Nothing to record!
```
**Fix:** Database initialization scripts haven't run. Wait longer or restart DB.
---
### Example 3: Blockchain Corruption
**What to check:**
```bash
docker compose logs backend-node-1 | grep "integrity"
```
**Look for:**
```
✗ Blockchain integrity check FAILED - possible corruption!
```
**Fix:** Restart backend: `docker compose restart backend-node-1`
---
### Example 4: Slow Startup
**What to check:**
```bash
# Watch logs during startup
docker compose logs -f backend-node-1 | grep -i "starting\|complete"
```
**Look for:**
- Time between "Starting" and "complete"
- Any pauses or delays
- Database slowness
**Common causes:**
- Database taking time to initialize
- Blockchain recording many elections
- Network latency
## Files Reference
### Logging Configuration
- **`backend/logging_config.py`** - Central logging setup, colors, emojis, levels
### Modules with Logging
- **`backend/main.py`** - Startup sequence logging
- **`backend/init_blockchain.py`** - Blockchain initialization logging
- **`backend/services.py`** - Service operation logging
- **`backend/database.py`** - Database operation logging
- **`backend/routes/*.py`** - API endpoint logging (future)
### Documentation
- **`LOGGING_GUIDE.md`** - Complete logging guide with examples
- **`BACKEND_STARTUP_GUIDE.md`** - Startup troubleshooting
- **`BLOCKCHAIN_ELECTION_INTEGRATION.md`** - Blockchain details
## Next Steps
1. **Run the backend:**
```bash
docker compose up -d backend
sleep 30
docker compose logs backend
```
2. **Watch for logs:**
- Look for "✓" (success) in startup
- Check for "blockchain" activity
- Verify "integrity verified"
3. **Test the system:**
```bash
python3 test_blockchain_election.py
```
4. **Monitor in production:**
- Set up log rotation (future)
- Send logs to centralized system (ELK, Splunk, etc.)
- Create alerts for errors
## Summary
The logging system provides:
**Clear visibility** into system operations
**Structured information** with timestamps and modules
**Color-coded output** for easy scanning
**Emoji prefixes** for quick identification
**Full exception details** for debugging
**Performance insights** from timing information
**Multi-node support** for load-balanced systems
This enables:
- Quick problem identification
- Faster debugging and resolution
- Better understanding of system behavior
- Performance monitoring and optimization
- Historical logs for analysis and auditing