Some checks failed
Integration Tests / integration-tests (push) Failing after 20s
Integration Tests / performance-tests (push) Has been skipped
Service Adapters (Python FastAPI) / test (3.11) (push) Failing after 23s
Frontend (React) / test (20) (push) Failing after 1m3s
Frontend (React) / build (push) Has been skipped
Frontend (React) / lighthouse (push) Has been skipped
Service Adapters (Python FastAPI) / test (3.12) (push) Failing after 23s
Service Adapters (Python FastAPI) / test (3.13) (push) Failing after 20s
Service Adapters (Python FastAPI) / build (push) Has been skipped
### Summary of Changes - Removed proxy configuration in `rsbuild.config.js` as the API Gateway is not running. - Added smooth transitions and gentle loading overlays in CSS for improved user experience during data loading. - Updated `Dashboard` component to conditionally display loading spinner and gentle loading overlay based on data fetching state. - Enhanced `useOfflineAwareServiceStatus` and `useOfflineAwareSystemData` hooks to manage loading states and service status more effectively. - Increased refresh intervals for service status and system data to reduce API call frequency. ### Expected Results - Improved user experience with smoother loading transitions and better feedback during data refreshes. - Enhanced handling of service status checks, providing clearer information when services are unavailable. - Streamlined code for managing loading states, making it easier to maintain and extend in the future.
149 lines
4.4 KiB
Markdown
149 lines
4.4 KiB
Markdown
# Unified Logging Configuration
|
|
|
|
This document describes the unified logging setup and usage in the LabFusion Service Adapters.
|
|
|
|
## Overview
|
|
|
|
The service adapters use Python's built-in `logging` module with a centralized configuration system that provides **unified logging for both application logs and incoming request logs**. All logs use the same format, handler, and configuration for consistency and easier monitoring.
|
|
|
|
## Logging Levels
|
|
|
|
- **DEBUG**: Detailed information for debugging (status checker operations)
|
|
- **INFO**: General information about application flow
|
|
- **WARNING**: Warning messages for non-critical issues
|
|
- **ERROR**: Error messages for failed operations
|
|
- **CRITICAL**: Critical errors that may cause application failure
|
|
|
|
## Configuration
|
|
|
|
Logging is configured in `services/logging_config.py` with unified settings:
|
|
|
|
- **Root Level**: INFO
|
|
- **Status Checker**: DEBUG (detailed health check logging)
|
|
- **Routes**: INFO (API endpoint logging)
|
|
- **Request Logging**: INFO (unified with application logs)
|
|
- **HTTP Client**: WARNING (reduced verbosity)
|
|
- **Unified Handler**: Single handler for all log types
|
|
|
|
## Log Format
|
|
|
|
**Unified Format** (same for application and request logs):
|
|
```
|
|
2024-01-15 10:30:45,123 - services.status_checker - INFO - status_checker.py:140 - Starting health check for 4 services
|
|
2024-01-15 10:30:45,124 - uvicorn.access - INFO - logging_middleware.py:45 - Request started: GET /services from 192.168.1.100
|
|
2024-01-15 10:30:45,125 - routes.general - INFO - general.py:78 - Service status endpoint called - checking all services
|
|
2024-01-15 10:30:45,126 - uvicorn.access - INFO - logging_middleware.py:55 - Request completed: GET /services -> 200 in 0.123s
|
|
```
|
|
|
|
Format includes:
|
|
- Timestamp
|
|
- Logger name (unified across all log types)
|
|
- Log level
|
|
- Filename and line number
|
|
- Message
|
|
|
|
## Usage Examples
|
|
|
|
### Basic Logging
|
|
```python
|
|
import logging
|
|
from services.logging_config import get_logger
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
logger.debug("Debug information")
|
|
logger.info("General information")
|
|
logger.warning("Warning message")
|
|
logger.error("Error occurred")
|
|
```
|
|
|
|
### Request Logging
|
|
```python
|
|
from services.logging_config import get_request_logger
|
|
|
|
request_logger = get_request_logger()
|
|
request_logger.info("Custom request log message")
|
|
```
|
|
|
|
### Application Logging
|
|
```python
|
|
from services.logging_config import get_application_logger
|
|
|
|
app_logger = get_application_logger()
|
|
app_logger.info("Application-level log message")
|
|
```
|
|
|
|
### Service Status Logging
|
|
The status checker automatically logs:
|
|
- Health check start/completion
|
|
- Individual service responses
|
|
- Response times
|
|
- Error conditions
|
|
- Authentication status
|
|
|
|
### API Endpoint Logging
|
|
Routes log:
|
|
- Endpoint calls
|
|
- Request processing
|
|
- Response generation
|
|
|
|
### Request Middleware Logging
|
|
The logging middleware automatically logs:
|
|
- Request start (method, path, client IP, user agent)
|
|
- Request completion (status code, processing time)
|
|
- Request errors (exceptions, processing time)
|
|
|
|
## Debug Endpoint
|
|
|
|
A debug endpoint is available at `/debug/logging` to:
|
|
- Test unified log levels across all logger types
|
|
- View current configuration
|
|
- Verify unified logging setup
|
|
- Test request, application, and route loggers
|
|
|
|
## Environment Variables
|
|
|
|
You can control logging behavior with environment variables:
|
|
|
|
```bash
|
|
# Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
|
|
export LOG_LEVEL=DEBUG
|
|
|
|
# Disable timestamps
|
|
export LOG_NO_TIMESTAMP=true
|
|
```
|
|
|
|
## Log Files
|
|
|
|
Currently, logs are output to stdout. For production, consider:
|
|
- File logging with rotation
|
|
- Structured logging (JSON)
|
|
- Log aggregation (ELK stack, Fluentd)
|
|
- Log levels per environment
|
|
|
|
## Troubleshooting
|
|
|
|
### No Logs Appearing
|
|
1. Check log level configuration
|
|
2. Verify logger names match module names
|
|
3. Ensure logging is initialized before use
|
|
|
|
### Too Many Logs
|
|
1. Increase log level to WARNING or ERROR
|
|
2. Disable DEBUG logging for specific modules
|
|
3. Use log filtering
|
|
|
|
### Performance Impact
|
|
1. Use appropriate log levels
|
|
2. Avoid logging in tight loops
|
|
3. Consider async logging for high-volume applications
|
|
|
|
## Best Practices
|
|
|
|
1. **Use appropriate levels**: DEBUG for development, INFO for production
|
|
2. **Include context**: Service names, request IDs, user information
|
|
3. **Structured messages**: Consistent format for parsing
|
|
4. **Avoid sensitive data**: No passwords, tokens, or personal information
|
|
5. **Performance**: Log asynchronously when possible
|
|
6. **Monitoring**: Set up alerts for ERROR and CRITICAL levels
|