Frappe Framework
Journalisation (Logging)
Activity Log, Error Log et les fichiers logs du bench se complètent. Log Settings règle la durée de conservation. Un DocType maison s’y inscrit par clear_old_logs.
Deux familles
Les journaux du bureau sont en base, interrogeables comme des documents, en général depuis l’AwesomeBar. Ceux du serveur sont des fichiers tournants. L’API Python est dans Journalisation. Le moniteur de requêtes est dans Profilage et supervision.
Dans Core : Access Log (lien ERPNext), Activity Log, Error Log, Scheduled Job Log. Le détail se lit sur le site.
Fichiers
Depuis la version 13, il y a aussi des journaux de site, écrits par l’application. Beaucoup de fichiers de bench viennent des processus autour. Dossiers : ./logs et ./sites/{site}/logs. Au moment de la rédaction, seuls frappe.web.log et scheduler.log existent aux deux niveaux. Au bench, les plus utiles cités sont bench.log, scheduler.log et worker.log : commandes, planificateur, tâches de fond.
Pour le journal web : enable_frappe_logger à true dans la config du site. La page écrit la consigne avec des > devant les lignes.
Instantanés
Pour les réponses HTTP 500 et au-dessus, un instantané donne le contexte. Une action du bureau en 500 ajoute une ligne dans ./sites/{site}/frappe.log : niveau ERROR, identifiant du type 2021-05-06 14:08:11.940809-127.0.0.1-bde, site, Form Dict. Le fichier correspondant est sous ./sites/frappeframework.com/error-snapshots, extension .json.
L’exemple publié : UnboundLocalError, variable headers utilisée avant affectation, dans orchestrator/agent.py. La pile commence par une InvalidSignature Fernet, puis cette erreur au ping de l’agent. Le balisage des cadres est incomplet. Le Form Dict d’exemple masque agent_password par des astérisques.
Ces instantanés sont recopiés en base, DocType Error Snapshot, et supprimés un mois après la création. Pour les couper : disable_error_snapshot à true.
Entretien
Les flux viennent de la CLI bench, du gestionnaire de processus ou de l’application. Pour savoir quels fichiers grossissent : supervisor.conf en production, Procfile en développement.
Log Settings règle la rétention des DocTypes de journal par défaut. Un DocType maison apparaît dans cet écran s’il a une méthode statique clear_old_logs(days=180). L’exemple efface, via le query builder, les lignes dont modified est plus vieux que Now() moins un intervalle de days.
En production, la page renvoie aussi vers les journaux MySQL, PostgreSQL et NGINX.
Point d’attention
enable_frappe_logger et disable_error_snapshot sont deux clés distinctes. L’instantané d’erreur reste un mois, puis le document est supprimé.
