feat: added logging
CI / test (push) Successful in 31s
CI / build (push) Successful in 28s

This commit is contained in:
2026-07-17 09:05:23 +02:00
parent 734309e955
commit 2256c11951
2 changed files with 74 additions and 0 deletions
+67
View File
@@ -158,3 +158,70 @@ MEDIA_ROOT = BASE_DIR / 'media'
EMAIL_USE_TLS = True
EMAIL_USE_SSL = False
# Logging
# https://docs.djangoproject.com/en/6.0/topics/logging/
# Se define entero (en vez de dejar el DEFAULT_LOGGING de Django) porque ese
# default, con DEBUG=False, solo engancha un handler de consola cuando
# DEBUG=True y manda los errores (django.request) por email a ADMINS cuando
# DEBUG=False; aquí ni ADMINS ni un EMAIL_HOST de verdad están configurados
# (ver env.py), así que en producción los 500 no se veían en ningún sitio.
# Con un handler de consola sin ese filtro, cualquier error queda en
# stdout/stderr, que es lo que recogen los logs del contenedor (`docker logs`,
# lo que agregue la plataforma de despliegue, etc.).
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '{asctime} {levelname} {name} {message}',
'style': '{',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'verbose',
},
},
# A WARNING fijo (no LOG_LEVEL): captura cualquier logger que no esté
# listado abajo (de terceros: weasyprint, whitenoise, PIL...) para que
# nada se pierda del todo, pero sin su parloteo en INFO/DEBUG -algunas
# librerías, como weasyprint, ya avisan cosas en INFO solo con
# importarlas-. 'django' y 'crochet' sí usan LOG_LEVEL, más abajo.
'root': {
'handlers': ['console'],
'level': 'WARNING',
},
'loggers': {
'django': {
'handlers': ['console'],
'level': LOG_LEVEL,
'propagate': False,
},
# Aquí es donde Django registra la traza completa de cualquier
# excepción no controlada en una vista (un 500): sin esto configurado
# explícitamente, en producción (DEBUG=False) solo se intentaba
# mandar por email a ADMINS, no configurado.
'django.request': {
'handlers': ['console'],
'level': 'ERROR',
'propagate': False,
},
'django.security': {
'handlers': ['console'],
'level': 'WARNING',
'propagate': False,
},
# Logger propio de la app, para poder hacer
# logging.getLogger(__name__) desde cualquier módulo de crochet/ sin
# tener que tocar esta configuración cada vez.
'crochet': {
'handlers': ['console'],
'level': LOG_LEVEL,
'propagate': False,
},
},
}