Journalisation et débogage
Journalisation et débogage
Dodock écrit ses messages de log avec le module logging de Python. La fonction frappe.logger() renvoie un logger qui écrit dans un fichier par module. Cette page décrit cette fonction et les messages que Dodock écrit lors d'un import de données.
Fichiers de log
frappe.logger("mon_module") écrit dans deux fichiers :
| Fichier | Contenu |
|---|---|
logs/mon_module.log (dossier du bench) | Les messages de tous les sites |
sites/<site>/logs/mon_module.log | Les messages du site courant |
Sans nom de module, le logger s'appelle frappe et écrit dans frappe.log. Il ajoute alors à chaque message le site et le contenu de la requête (form_dict). Les valeurs des clés qui contiennent password, secret, token, key ou pwd sont masquées.
Chaque fichier tourne à 100 000 octets, avec 20 fichiers conservés. Les paramètres max_size et file_count changent ces valeurs.
Les fichiers web.log, worker.log et schedule.log du dossier logs/ viennent des processus du bench (serveur web, workers, planificateur). Ils contiennent la sortie de ces processus, pas les messages de frappe.logger().
Niveau de log
Par défaut, le logger garde les messages de niveau ERROR et plus. Avec le serveur de développement (bench start, variable DEV_SERVER), il garde les messages de niveau WARNING et plus.
Pour changer le niveau dans un script ou une console, appelez frappe.utils.logger.set_log_level() avant de créer le logger :
from frappe.utils.logger import set_log_level
set_log_level("DEBUG")
frappe.logger("mon_module").debug("Message visible")
Pour écrire sur la sortie d'erreur au lieu des fichiers, définissez la variable d'environnement FRAPPE_STREAM_LOGGING (utile dans un conteneur).
Écrire un message
import frappe
logger = frappe.logger("mon_module")
logger.info("Synchronisation démarrée")
try:
synchroniser()
except Exception:
logger.error("Synchronisation en échec", exc_info=True)
raise
exc_info=True ajoute la trace de l'exception au message.
frappe.logger() écrit seulement dans les fichiers. Pour une erreur que l'administrateur doit voir dans l'interface, utilisez aussi frappe.log_error(), qui crée un Journal des Erreurs.
Échecs d'import de données
Lors d'un import de données, Dodock écrit dans data_import.log :
| Événement | Niveau | Message |
|---|---|---|
| Une ou plusieurs lignes en échec | ERROR | Data Import <nom>: row(s) [<lignes>] failed to import, avec la trace |
| L'import entier en échec | ERROR | Data import <nom> failed, avec la trace |
| Import partiel (au moins un succès et un échec) | WARNING | Data Import <nom>: <n> of <total> rows failed |
| Création impossible d'une valeur liée (mise en correspondance des valeurs) | ERROR | Data Import <nom>: could not create <DocType> <valeur> |
Avec le niveau par défaut (ERROR), le message d'import partiel n'est pas écrit.
Ces messages complètent les enregistrements en base : le Journal d'imports de données pour chaque ligne et le Journal des Erreurs pour un échec global.
Pour suivre les imports d'un site :
tail -f sites/<site>/logs/data_import.log