Fix logging configuration and upgrade system packages in Docker#18
Conversation
Kaiohz
commented
May 6, 2026
- Add missing logging setup in stream_message use case
- Ensure root logger level is set to INFO in main.py
- Upgrade system packages in Dockerfile to address CVEs
- Add missing logging setup in stream_message use case - Ensure root logger level is set to INFO in main.py - Upgrade system packages in Dockerfile to address CVEs
Kaiohz
left a comment
There was a problem hiding this comment.
📋 Review PR #18
Score : 7/10
✅ Points positifs
Dockerfile :
- Bonne pratique de sécurité : mise à jour des packages système pour corriger les CVEs (ex: libgnutls30)
- Nettoyage approprié du cache apt (
apt-get clean && rm -rf /var/lib/apt/lists/*) - Placement judicieux avant le COPY du venv pour optimiser le cache Docker
main.py :
- Configuration défensive du root logger avec
setLevel(logging.INFO) - Garantit que le niveau INFO est appliqué même si des imports antérieurs ont modifié la config
Commit :
- Message clair et bien structuré
- Changements ciblés et non-invasifs
⚠️ Points à améliorer
1. stream_message.py - Pattern de logging problématique
logger.propagate = False # ← Problème iciPourquoi c'est un problème :
propagate=Falseempêche les logs de ce module d'être propagés au root logger- Si tu configures d'autres handlers au niveau root (ex: logging centralisé, Sentry, OpenObserve), ils ne recevront pas les logs de ce module
- C'est un anti-pattern de configurer les handlers au niveau du module plutôt qu'au niveau de l'application
Duplication :
- Le format
"%(asctime)s - %(name)s - %(levelname)s - %(message)s"est dupliqué avec main.py - Si on change le format global, il faut penser à le changer ici aussi → maintenance
💡 Recommandations
Option A : Supprimer le bloc de config locale (recommandé)
# src/application/use_cases/stream_message.py
logger = logging.getLogger(__name__)
# La configuration globale de main.py gère toutSi le but est de voir les logs dans les tests, ajouter un conftest.py :
# tests/conftest.py
import logging
import pytest
@pytest.fixture(scope="session", autouse=True)
def configure_logging():
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
)Option B : Null handler pattern
Si tu veux vraiment éviter le warning "No handlers found" sans casser la propagation :
logger = logging.getLogger(__name__)
logger.addHandler(logging.NullHandler())Dockerfile : Spécifier le SHA de l'image
Pour reproductibilité des builds :
FROM python:3.11-slim-bookworm@sha256:xxx🎯 Verdict
La PR est mergeable si tu acceptes le compromis sur le logging. Le fix Docker est un gain immédiat de sécurité.
Pour une config propre, je recommande d'enlever le bloc if not logger.handlers: dans stream_message.py et de gérer le logging globalement dans main.py + conftest.py pour les tests.
Suggestion : Merge maintenant, créer un ticket tech debt pour refactor le logging si c'est important.
| _handler = logging.StreamHandler(sys.stdout) | ||
| _handler.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")) | ||
| logger.addHandler(_handler) | ||
| logger.setLevel(logging.INFO) |
There was a problem hiding this comment.
Logging anti-pattern détecté ici
propagate=False empêche la propagation vers le root logger. Considère d'enlever ce bloc entier et de laisser main.py gérer la configuration globale.
Si tu as besoin de logs dans les tests, ajoute un conftest.py avec une fixture logging.