Help me bij het implementeren van een aangepaste logging-structuur voor mijn Django-toepassing.
description
Door het implementeren van een aangepaste logging-structuur kan ik de monitoringmogelijkheden van mijn toepassing verbeteren, foutopsporing verbeteren en de logging-uitvoer afstemmen op mijn ontwikkelings- en operationele vereisten.
prompt
try_prompt
Help me een aangepaste logging-structuur ontwerpen die is afgestemd op mijn Django-toepassing. Beschrijf mijn huidige logging-behoe ... more
generate_helper
...
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een voorstel voor een aangepaste logging-structuur voor jouw Django-toepassing, gericht op het volgen van fouten en prestatiegegevens, met implementatie van de niveaus INFO, ERROR en CRITICAL:
1. Loggingsstructuur en doelen:
- Fouten volgen (ERROR en CRITICAL): Om kritieke problemen en fouten te detecteren en te kunnen analyseren.
- Prestatiegegevens (INFO): Om inzicht te krijgen in de uitvoeringstijd van belangrijke processen of endpoints.
2. Logging-niveaus:
- INFO: Voor algemene informatie over de normale werking en prestatiegegevens.
- ERROR: Voor niet-kritieke fouten die hersteld kunnen worden en die niet de werking volledig onderbreken.
- CRITICAL: Voor ernstige fouten die de werking volledig kunnen stilleggen of dat er direct actie nodig is.
3. Output en formaten:
- Logs naar console en bestand(en).
- Consistente formattering met timestamps, logniveau, module en bericht.
4. Voorbeeld configuratie (in `settings.py`):
```python
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '[{asctime}] {levelname} {name} - {message}',
'style': '{',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'verbose',
},
'file': {
'class': 'logging.FileHandler',
'filename': 'logs/app.log',
'formatter': 'verbose',
},
},
'loggers': {
'django': {
'handlers': ['console', 'file'],
'level': 'INFO',
'propagate': False,
},
'mijn_app': {
'handlers': ['console', 'file'],
'level': 'INFO',
'propagate': False,
},
},
}
```
5. Gebruik in code:
```python
import logging
logger = logging.getLogger('mijn_app')
# Algemene info
logger.info('De toepassing draait correct.')
# Prestatiegegevens (bijvoorbeeld uitvoeringstijd)
import time
start_time = time.time()
# code die gemeten wordt
duur = time.time() - start_time
logger.info(f'Proces duurde {duur:.2f} seconden.')
# Foutmelding
try:
# code die een fout kan veroorzaken
pass
except ValueError as e:
logger.error(f'Fout opgetreden: {e}')
# Kritieke fout
logger.critical('Onherstelbare fout opgetreden, toepassing wordt afgesloten.')
```
Kort samengevat: je implementeert INFO voor normale en prestatiegegevens, ERROR voor niet-kritieke fouten, en CRITICAL voor ernstige problemen. De logs worden geformatteerd en opgeslagen in console en bestand voor goede traceerbaarheid.
provider: deepseek
model: deepseek-chat
Hier is een aangepaste logging-structuur voor je Django-toepassing, afgestemd op het volgen van fouten en prestatiegegevens met INFO, ERROR en CRITICAL niveaus:
## Django settings.py configuratie
```python
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',
'style': '{',
},
'simple': {
'format': '{levelname} {asctime} {message}',
'style': '{',
},
},
'handlers': {
# INFO logs voor prestatie tracking
'info_file': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/var/log/django/app_info.log',
'maxBytes': 10485760, # 10MB
'backupCount': 5,
'formatter': 'simple',
},
# ERROR logs voor fouttracking
'error_file': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/var/log/django/app_error.log',
'maxBytes': 10485760,
'backupCount': 5,
'formatter': 'verbose',
},
# CRITICAL logs voor systeem-brede problemen
'critical_mail': {
'level': 'CRITICAL',
'class': 'django.utils.log.AdminEmailHandler',
'formatter': 'verbose',
},
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'simple',
},
},
'loggers': {
'django': {
'handlers': ['console', 'info_file', 'error_file'],
'level': 'INFO',
'propagate': False,
},
'myapp': {
'handlers': ['info_file', 'error_file', 'critical_mail'],
'level': 'INFO',
'propagate': False,
},
'performance': {
'handlers': ['info_file'],
'level': 'INFO',
'propagate': False,
},
},
}
```
## Gebruik in je code
```python
import logging
# Basis loggers
logger = logging.getLogger('myapp')
perf_logger = logging.getLogger('performance')
# Prestatie tracking (INFO)
def some_view(request):
start_time = time.time()
# Je business logica hier
result = some_expensive_operation()
# Prestatie logging
execution_time = time.time() - start_time
perf_logger.info(
f'Operation completed in {execution_time:.2f}s - '
f'User: {request.user}, Endpoint: {request.path}'
)
return result
# Fout tracking (ERROR)
def process_data(data):
try:
# Verwerk data
processed = complex_data_processing(data)
logger.info(f"Data succesvol verwerkt: {len(data)} items")
return processed
except ValueError as e:
logger.error(f"Ongeldige data ontvangen: {str(e)}", exc_info=True)
raise
except Exception as e:
logger.error(f"Onverwachte fout bij dataverwerking: {str(e)}", exc_info=True)
raise
# Kritieke fouten (CRITICAL)
def critical_system_operation():
try:
# Kritieke systeemoperatie
perform_critical_task()
except Exception as e:
logger.critical(
f"KRITIEK: Systeemoperatie mislukt - {str(e)}",
exc_info=True,
extra={'system_component': 'payment_processor'}
)
# Stuur ook email naar admins
raise
```
## Aanvullende prestatie logging
```python
# Custom performance decorator
def log_performance(operation_name):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
start = time.time()
try:
result = func(*args, **kwargs)
duration = time.time() - start
perf_logger.info(
f'Performance: {operation_name} - '
f'Duration: {duration:.3f}s - Success'
)
return result
except Exception as e:
duration = time.time() - start
logger.error(
f'Performance: {operation_name} - '
f'Duration: {duration:.3f}s - Failed: {str(e)}'
)
raise
return wrapper
return decorator
# Gebruik
@log_performance('database_query')
def complex_query():
# Je database logica
pass
```
## Log bestandsstructuur
```
/var/log/django/
├── app_info.log # INFO niveau - prestaties en algemene info
├── app_error.log # ERROR niveau - fouten en exceptions
└── app_critical.log # CRITICAL niveau - systeem-brede problemen
```
Deze structuur zorgt voor:
- **INFO**: Prestatie metrics en algemene applicatie flow
- **ERROR**: Operationele fouten en exceptions
- **CRITICAL**: Systeem-kritieke fouten met email notificaties
Pas de bestandspaden en formaten aan naar je specifieke infrastructuur.

