docs: Add logging implementation summary
This commit is contained in:
parent
7b9d6d0407
commit
99ec83dd0c
415
e-voting-system/LOGGING_IMPLEMENTATION_SUMMARY.md
Normal file
415
e-voting-system/LOGGING_IMPLEMENTATION_SUMMARY.md
Normal 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
|
||||
Loading…
x
Reference in New Issue
Block a user