{"title":"Journalisation","version":"5.0","locale":"fr","docname":"ref/logging","url":"/fr/5.0/ref/logging/","canonical":"https://djangodocs.dev/fr/5.0/ref/logging/","summary":"Voir aussi Configuration et utilisation de la journalisation Aperçu de la journalisation dans Django Le module de journalisation de Django étend le module Python…","html":"<span id=\"logging-ref\"></span><h1>Journalisation<a class=\"heading-anchor\" href=\"#logging\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Voir aussi</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/fr/5.0/howto/logging/#logging-how-to\"><span class=\"std std-ref\">Configuration et utilisation de la journalisation</span></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/fr/5.0/topics/logging/#logging-explanation\"><span class=\"std std-ref\">Aperçu de la journalisation dans Django</span></a></p></li>\n</ul>\n</aside>\n<p id=\"module-django.utils.log\">Le module de journalisation de Django étend le module Python intégré <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#module-logging\" title=\"(disponible dans Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">logging</span></code></a>.</p>\n<p>La journalisation est configurée dans le contexte plus général de la fonction <a class=\"reference internal\" href=\"/fr/5.0/ref/applications/#django.setup\" title=\"django.setup\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.setup()</span></code></a> de Django, ce qui fait qu’elle est toujours disponible, sauf si elle est explicitement désactivée.</p>\n<section id=\"django-s-default-logging-configuration\">\n<span id=\"default-logging-configuration\"></span><h2>Configuration de journalisation par défaut de Django<a class=\"heading-anchor\" href=\"#django-s-default-logging-configuration\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Par défaut, Django utilise le <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.config.html#logging-config-dictschema\" title=\"(disponible dans Python v3.14)\"><span class=\"xref std std-ref\">format logging.config.dictConfig</span></a> de Python.</p>\n<section id=\"default-logging-conditions\">\n<h3>Conditions de journalisation par défaut<a class=\"heading-anchor\" href=\"#default-logging-conditions\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Les conditions complètes de journalisation par défaut sont :</p>\n<p>Lorsque <a class=\"reference internal\" href=\"/fr/5.0/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>:</p>\n<ul class=\"simple\">\n<li><p>Le journaliseur <code class=\"docutils literal notranslate\"><span class=\"pre\">django</span></code> envoie les messages de la hiérarchie <code class=\"docutils literal notranslate\"><span class=\"pre\">django</span></code> (sauf <code class=\"docutils literal notranslate\"><span class=\"pre\">django.server</span></code>) de niveau <code class=\"docutils literal notranslate\"><span class=\"pre\">INFO</span></code> ou plus vers la console.</p></li>\n</ul>\n<p>Lorsque <a class=\"reference internal\" href=\"/fr/5.0/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>:</p>\n<ul class=\"simple\">\n<li><p>Le journaliseur <code class=\"docutils literal notranslate\"><span class=\"pre\">django</span></code> envoie les messages de la hiérarchie <code class=\"docutils literal notranslate\"><span class=\"pre\">django</span></code> (sauf <code class=\"docutils literal notranslate\"><span class=\"pre\">django.server</span></code>) de niveau <code class=\"docutils literal notranslate\"><span class=\"pre\">ERROR</span></code> ou <code class=\"docutils literal notranslate\"><span class=\"pre\">CRITICAL</span></code> à <a class=\"reference internal\" href=\"#django.utils.log.AdminEmailHandler\" title=\"django.utils.log.AdminEmailHandler\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AdminEmailHandler</span></code></a>.</p></li>\n</ul>\n<p>Indépendamment de la valeur de <a class=\"reference internal\" href=\"/fr/5.0/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a>:</p>\n<ul class=\"simple\">\n<li><p>Le journaliseur <a class=\"reference internal\" href=\"#django-server-logger\"><span class=\"std std-ref\">django.server</span></a> envoie des messages au niveau <code class=\"docutils literal notranslate\"><span class=\"pre\">INFO</span></code> et plus à la console.</p></li>\n</ul>\n<p>Tous les journaliseurs à l’exception de <a class=\"reference internal\" href=\"#django-server-logger\"><span class=\"std std-ref\">django.server</span></a> propagent la journalisation vers leur parent, jusqu’au journaliseur racine <code class=\"docutils literal notranslate\"><span class=\"pre\">django</span></code>. Les gestionnaires <code class=\"docutils literal notranslate\"><span class=\"pre\">console</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">mail_admins</span></code> sont liés au journaliseur racine pour offrir le comportement décrit ci-dessus.</p>\n<p>Les valeurs par défaut de Python envoient les enregistrements de niveau <code class=\"docutils literal notranslate\"><span class=\"pre\">WARNING</span></code> et supérieur dans la console.</p>\n</section>\n<section id=\"default-logging-definition\">\n<span id=\"id1\"></span><h3>Définition de journalisation par défaut<a class=\"heading-anchor\" href=\"#default-logging-definition\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>La configuration de journalisation par défaut de Django hérite des valeurs par défaut de Python. Elle est disponible dans <code class=\"docutils literal notranslate\"><span class=\"pre\">django.utils.log.DEFAULT_LOGGING</span></code>  et définie dans <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/5.0.x/django/utils/log.py\">django/utils/log.py</a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"p\">{</span>\n    <span class=\"s2\">&quot;version&quot;</span><span class=\"p\">:</span> <span class=\"mi\">1</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;disable_existing_loggers&quot;</span><span class=\"p\">:</span> <span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;filters&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;require_debug_false&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;()&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.utils.log.RequireDebugFalse&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n        <span class=\"s2\">&quot;require_debug_true&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;()&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.utils.log.RequireDebugTrue&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n    <span class=\"s2\">&quot;formatters&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;django.server&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;()&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.utils.log.ServerFormatter&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;format&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;[</span><span class=\"si\">{server_time}</span><span class=\"s2\">] </span><span class=\"si\">{message}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;style&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;{&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n    <span class=\"p\">},</span>\n    <span class=\"s2\">&quot;handlers&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;console&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;level&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;INFO&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;filters&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;require_debug_true&quot;</span><span class=\"p\">],</span>\n            <span class=\"s2\">&quot;class&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;logging.StreamHandler&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n        <span class=\"s2\">&quot;django.server&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;level&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;INFO&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;class&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;logging.StreamHandler&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;formatter&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.server&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n        <span class=\"s2\">&quot;mail_admins&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;level&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;ERROR&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;filters&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;require_debug_false&quot;</span><span class=\"p\">],</span>\n            <span class=\"s2\">&quot;class&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.utils.log.AdminEmailHandler&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n    <span class=\"s2\">&quot;loggers&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;django&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;handlers&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;console&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;mail_admins&quot;</span><span class=\"p\">],</span>\n            <span class=\"s2\">&quot;level&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;INFO&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n        <span class=\"s2\">&quot;django.server&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;handlers&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;django.server&quot;</span><span class=\"p\">],</span>\n            <span class=\"s2\">&quot;level&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;INFO&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;propagate&quot;</span><span class=\"p\">:</span> <span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>Consultez <a class=\"reference internal\" href=\"/fr/5.0/topics/logging/#configuring-logging\"><span class=\"std std-ref\">Configuration de la journalisation</span></a> pour savoir comment compléter ou remplacer cette configuration de journalisation par défaut.</p>\n</section>\n</section>\n<section id=\"django-logging-extensions\">\n<h2>Extensions de journalisation de Django<a class=\"heading-anchor\" href=\"#django-logging-extensions\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django fournit un certain nombre d’utilitaires pour gérer les exigences particulières de la journalisation dans le contexte d’un environnement de serveur web.</p>\n<section id=\"loggers\">\n<h3>Journaliseurs<a class=\"heading-anchor\" href=\"#loggers\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django fournit plusieurs journaliseurs intégrés :</p>\n<section id=\"django\">\n<span id=\"django-logger\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">django</span></code><a class=\"heading-anchor\" href=\"#django\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Le journaliseur parent des messages dans la <a class=\"reference internal\" href=\"/fr/5.0/howto/logging/#naming-loggers-hierarchy\"><span class=\"std std-ref\">hiérarchie des journaliseurs nommés</span></a> de Django. Django lui-même ne poste pas de messages avec ce nom. Il utilise plutôt l’un des journaliseurs ci-dessous.</p>\n</section>\n<section id=\"django-request\">\n<span id=\"django-request-logger\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">django.request</span></code><a class=\"heading-anchor\" href=\"#django-request\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Messages de journal liés au traitement des requêtes. Les réponses 5xx sont signalées comme des messages <code class=\"docutils literal notranslate\"><span class=\"pre\">ERROR</span></code>. Les réponses 4xx sont signalées comme des messages <code class=\"docutils literal notranslate\"><span class=\"pre\">WARNING</span></code>. Les requêtes journalisées vers <code class=\"docutils literal notranslate\"><span class=\"pre\">django.security</span></code> ne sont pas journalisées vers <code class=\"docutils literal notranslate\"><span class=\"pre\">django.request</span></code>.</p>\n<p>Les messages envoyés à ce journaliseur possèdent le contexte supplémentaire suivant :</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">status_code</span></code>: le code de réponse HTTP associé à la requête.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></code>: l’objet requête qui a généré le message de journal.</p></li>\n</ul>\n</section>\n<section id=\"django-server\">\n<span id=\"django-server-logger\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">django.server</span></code><a class=\"heading-anchor\" href=\"#django-server\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Messages de journal liés au traitement des requêtes reçues par le serveur sollicité par la commande <a class=\"reference internal\" href=\"/fr/5.0/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">runserver</span></code></a>. Les réponses HTTP 5xx sont journalisées comme des messages <code class=\"docutils literal notranslate\"><span class=\"pre\">ERROR</span></code>. Les réponses 4xx sont journalisées comme des messages <code class=\"docutils literal notranslate\"><span class=\"pre\">WARNING</span></code>, et tout le reste est journalisé comme message <code class=\"docutils literal notranslate\"><span class=\"pre\">INFO</span></code>.</p>\n<p>Les messages envoyés à ce journaliseur possèdent le contexte supplémentaire suivant :</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">status_code</span></code>: le code de réponse HTTP associé à la requête.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></code>: l’objet requête (de type <a class=\"reference external\" href=\"https://docs.python.org/3/library/socket.html#socket.socket\" title=\"(disponible dans Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">socket.socket</span></code></a>) qui a généré le message de journal.</p></li>\n</ul>\n</section>\n<section id=\"django-template\">\n<span id=\"django-template-logger\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">django.template</span></code><a class=\"heading-anchor\" href=\"#django-template\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Journalise les messages liés au rendu des gabarits.</p>\n<ul class=\"simple\">\n<li><p>Les variables de contexte manquantes sont journalisées comme des messages de type <code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code>.</p></li>\n</ul>\n</section>\n<section id=\"django-db-backends\">\n<span id=\"django-db-logger\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.backends</span></code><a class=\"heading-anchor\" href=\"#django-db-backends\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Messages en lien avec l’interaction entre le code et la base de données. Par exemple, chaque instruction SQL de niveau applicatif exécutée par une requête est envoyée à ce journaliseur au niveau <code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code>.</p>\n<p>Les messages envoyés à ce journaliseur possèdent le contexte supplémentaire suivant :</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">duration</span></code>: le temps d’exécution de l’instruction SQL concernée.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sql</span></code>: l’instruction SQL exécutée.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">params</span></code>: les paramètres utilisés dans l’appel SQL.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">alias</span></code>: l’alias de la base de données utilisée dans l’appel SQL.</p></li>\n</ul>\n<p>Pour des raisons de performance, la journalisation SQL n’est activée que lorsque <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.DEBUG</span></code> est défini à <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, peu importe le niveau de journalisation ou les gestionnaires installés.</p>\n<p>Cette journalisation ne concerne pas l’initialisation au niveau infrastructure (par ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">SET</span> <span class=\"pre\">TIMEZONE</span></code>). Activez la journalisation des requêtes au niveau de la base de données si vous souhaitez voir toutes les requêtes à la base de données.</p>\n<aside class=\"version-note version-changed\" data-version=\"4.2\">\n<p class=\"version-note-title\">Changed in Django 4.2</p><p>La prise en charge de la journalisation des requêtes de gestion de transaction (<code class=\"docutils literal notranslate\"><span class=\"pre\">BEGIN</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">COMMIT</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">ROLLBACK</span></code>) a été ajoutée.</p>\n</aside>\n</section>\n<section id=\"django-utils-autoreload\">\n<span id=\"django-utils-autoreloader-logger\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">django.utils.autoreload</span></code><a class=\"heading-anchor\" href=\"#django-utils-autoreload\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Messages de journalisation liés au code de rechargement automatique durant l’exécution du serveur de développement de Django. Ce journaliseur produit un message <code class=\"docutils literal notranslate\"><span class=\"pre\">INFO</span></code> lorsqu’il détecte une modification dans un fichier de code source et peut produire des messages d’avertissement <code class=\"docutils literal notranslate\"><span class=\"pre\">WARNING</span></code> pendant l’inspection du système de fichiers et les processus d’inscription aux évènements.</p>\n</section>\n<section id=\"django-contrib-auth\">\n<span id=\"django-contrib-auth-logger\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.auth</span></code><a class=\"heading-anchor\" href=\"#django-contrib-auth\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<aside class=\"version-note version-added\" data-version=\"4.2.16\">\n<p class=\"version-note-title\">New in Django 4.2.16</p></aside>\n<p>Log messages related to <a class=\"reference internal\" href=\"/fr/5.0/ref/contrib/auth/\"><span class=\"doc\">django.contrib.auth</span></a>, particularly <code class=\"docutils literal notranslate\"><span class=\"pre\">ERROR</span></code> messages\nare generated when a <a class=\"reference internal\" href=\"/fr/5.0/topics/auth/default/#django.contrib.auth.forms.PasswordResetForm\" title=\"django.contrib.auth.forms.PasswordResetForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">PasswordResetForm</span></code></a> is\nsuccessfully submitted but the password reset email cannot be delivered due to\na mail sending exception.</p>\n</section>\n<section id=\"django-contrib-gis\">\n<span id=\"django-contrib-gis-logger\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.gis</span></code><a class=\"heading-anchor\" href=\"#django-contrib-gis\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Messages de journalisation liés à <a class=\"reference internal\" href=\"/fr/5.0/ref/contrib/gis/\"><span class=\"doc\">GeoDjango</span></a> à différents endroits : durant le chargement des bibliothèques géospatiales externes (GEOS, GDAL, etc.) et lors du signalement d’erreurs. Chaque entrée de journalisation <code class=\"docutils literal notranslate\"><span class=\"pre\">ERROR</span></code> inclut l’exception interceptée et les données contextuelles en rapport.</p>\n</section>\n<section id=\"django-dispatch\">\n<span id=\"django-dispatch-logger\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">django.dispatch</span></code><a class=\"heading-anchor\" href=\"#django-dispatch\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Ce journaliseur est utilisé dans les <a class=\"reference internal\" href=\"/fr/5.0/ref/signals/\"><span class=\"doc\">Signaux</span></a>, spécifiquement dans la classe <a class=\"reference internal\" href=\"/fr/5.0/topics/signals/#django.dispatch.Signal\" title=\"django.dispatch.Signal\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">Signal</span></code></a>, pour informer des problèmes d’envoi de signaux vers un récepteur connecté. L’entrée de journal <code class=\"docutils literal notranslate\"><span class=\"pre\">ERROR</span></code> inclut l’exception interceptée dans <code class=\"docutils literal notranslate\"><span class=\"pre\">exc_info</span></code> et ajoute le contexte supplémentaire suivant :</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">receiver</span></code>: le nom du récepteur.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">err</span></code>: l’exception générée au moment d’appeler le récepteur.</p></li>\n</ul>\n</section>\n<section id=\"django-security\">\n<span id=\"django-security-logger\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">django.security.*</span></code><a class=\"heading-anchor\" href=\"#django-security\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Les journaliseurs <code class=\"docutils literal notranslate\"><span class=\"pre\">security</span></code> reçoivent les messages à chaque occurrence de <a class=\"reference internal\" href=\"/fr/5.0/ref/exceptions/#django.core.exceptions.SuspiciousOperation\" title=\"django.core.exceptions.SuspiciousOperation\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">SuspiciousOperation</span></code></a> et des autres erreurs liées à la sécurité. Il existe un sous-sérialiseur pour chaque sous-type d’erreur de sécurité, y compris toutes les <code class=\"docutils literal notranslate\"><span class=\"pre\">SuspiciousOperation</span></code>. Le niveau des événements journalisés dépend de l’endroit où l’exception est traitée. La plupart des occurrences sont journalisées comme des avertissements, alors que toute exception <code class=\"docutils literal notranslate\"><span class=\"pre\">SuspiciousOperation</span></code> atteignant le gestionnaire WSGI sera journalisée comme une erreur. Par exemple, lorsqu’un en-tête HTTP <code class=\"docutils literal notranslate\"><span class=\"pre\">Host</span></code> contenu dans une requête de client ne correspond pas à  <a class=\"reference internal\" href=\"/fr/5.0/ref/settings/#std-setting-ALLOWED_HOSTS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ALLOWED_HOSTS</span></code></a>, Django renvoie une réponse 400 et un message d’erreur est journalisé dans le journaliseur <code class=\"docutils literal notranslate\"><span class=\"pre\">django.security.DisallowedHost</span></code>.</p>\n<p>Ces événements de journal aboutissent par défaut dans le journaliseur <code class=\"docutils literal notranslate\"><span class=\"pre\">django</span></code>, qui envoie les erreurs par courriel aux administrateurs lorsque <code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG=False</span></code>. Les requêtes aboutissant à une réponse 400 en raison d’une erreur <code class=\"docutils literal notranslate\"><span class=\"pre\">SuspiciousOperation</span></code> ne sont pas journalisées dans <code class=\"docutils literal notranslate\"><span class=\"pre\">django.request</span></code>, mais seulement dans le journaliseur <code class=\"docutils literal notranslate\"><span class=\"pre\">django.security</span></code>.</p>\n<p>Pour réduire au silence un type particulier de <code class=\"docutils literal notranslate\"><span class=\"pre\">SuspiciousOperation</span></code>, vous pouvez surcharger le journaliseur correspondant en suivant cet exemple :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">LOGGING</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"s2\">&quot;handlers&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;null&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;class&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;logging.NullHandler&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n    <span class=\"s2\">&quot;loggers&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;django.security.DisallowedHost&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;handlers&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;null&quot;</span><span class=\"p\">],</span>\n            <span class=\"s2\">&quot;propagate&quot;</span><span class=\"p\">:</span> <span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n    <span class=\"c1\"># ...</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>Les autres journaliseurs <code class=\"docutils literal notranslate\"><span class=\"pre\">django.security</span></code> non basés sur <code class=\"docutils literal notranslate\"><span class=\"pre\">SuspiciousOperation</span></code> sont :</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">django.security.csrf</span></code>: pour les <a class=\"reference internal\" href=\"/fr/5.0/howto/csrf/#csrf-rejected-requests\"><span class=\"std std-ref\">échecs CSRF</span></a>.</p></li>\n</ul>\n</section>\n<section id=\"django-db-backends-schema\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.backends.schema</span></code><a class=\"heading-anchor\" href=\"#django-db-backends-schema\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Journalise les requêtes SQL exécutées pendant les modifications de schéma de la base de données effectuées par le <a class=\"reference internal\" href=\"/fr/5.0/topics/migrations/\"><span class=\"doc\">système des migrations</span></a>. Notez que les requêtes exécutées par <a class=\"reference internal\" href=\"/fr/5.0/ref/migration-operations/#django.db.migrations.operations.RunPython\" title=\"django.db.migrations.operations.RunPython\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RunPython</span></code></a> ne sont pas journalisées. Les messages de ce journaliseur possèdent <code class=\"docutils literal notranslate\"><span class=\"pre\">params</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">sql</span></code> dans leur contexte complémentaire (mais pas la durée comme <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.backends</span></code>). Ces valeurs ont la même signification que <a class=\"reference internal\" href=\"#django-db-logger\"><span class=\"std std-ref\">django.db.backends</span></a> l’explique.</p>\n</section>\n</section>\n<section id=\"handlers\">\n<h3>Gestionnaires<a class=\"heading-anchor\" href=\"#handlers\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django propose un gestionnaire de journalisation en plus de <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.handlers.html#module-logging.handlers\" title=\"(disponible dans Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">ceux</span> <span class=\"pre\">offerts</span> <span class=\"pre\">par</span> <span class=\"pre\">le</span> <span class=\"pre\">module</span> <span class=\"pre\">logging</span> <span class=\"pre\">de</span> <span class=\"pre\">Python</span></code></a>.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.utils.log.AdminEmailHandler\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AdminEmailHandler</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">include_html</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">email_backend</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">reporter_class</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.log.AdminEmailHandler\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ce gestionnaire envoie un courriel aux administrateurs du site (<a class=\"reference internal\" href=\"/fr/5.0/ref/settings/#std-setting-ADMINS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ADMINS</span></code></a>) pour chaque message de journal qu’il reçoit.</p>\n<p>Si le message de journalisation contient un attribut <code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></code>, les détails complets de la requête seront inclus dans le courriel. Le sujet du courriel contiendra « internal IP » si l’adresse IP du client se trouve dans le réglage <a class=\"reference internal\" href=\"/fr/5.0/ref/settings/#std-setting-INTERNAL_IPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INTERNAL_IPS</span></code></a>; sinon, il contiendra « EXTERNAL IP ».</p>\n<p>Si la ligne de journal contient des informations sur une trace de débogage, celle-ci est incluse dans le courriel.</p>\n<p>Le paramètre <code class=\"docutils literal notranslate\"><span class=\"pre\">include_html</span></code> de <code class=\"docutils literal notranslate\"><span class=\"pre\">AdminEmailHandler</span></code> est utilisé pour contrôler si le courriel contenant la trace de débogage doit inclure une pièce jointe HTML contenant la page web complète de débogage qui aurait été affichée si le réglage <a class=\"reference internal\" href=\"/fr/5.0/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> valait <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>. Pour définir cette valeur dans votre configuration, incluez ce paramètre dans la définition du gestionnaire pour <code class=\"docutils literal notranslate\"><span class=\"pre\">django.utils.log.AdminEmailHandler</span></code>, comme ceci :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"s2\">&quot;handlers&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;mail_admins&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;level&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;ERROR&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;class&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.utils.log.AdminEmailHandler&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;include_html&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>Soyez conscient des <a class=\"reference internal\" href=\"/fr/5.0/topics/logging/#logging-security-implications\"><span class=\"std std-ref\">implications sécuritaires de la journalisation</span></a> lorsque vous utilisez  <code class=\"docutils literal notranslate\"><span class=\"pre\">AdminEmailHandler</span></code>.</p>\n<p>En définissant le paramètre <code class=\"docutils literal notranslate\"><span class=\"pre\">email_backend</span></code> de <code class=\"docutils literal notranslate\"><span class=\"pre\">AdminEmailHandler</span></code>, le <a class=\"reference internal\" href=\"/fr/5.0/topics/email/#topic-email-backends\"><span class=\"std std-ref\">moteur de messagerie</span></a> utilisé par le gestionnaire peut être surchargé, comme ceci :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"s2\">&quot;handlers&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;mail_admins&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;level&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;ERROR&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;class&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.utils.log.AdminEmailHandler&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;email_backend&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.core.mail.backends.filebased.EmailBackend&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>Par défaut, c’est une instance du moteur de messagerie indiqué dans <a class=\"reference internal\" href=\"/fr/5.0/ref/settings/#std-setting-EMAIL_BACKEND\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">EMAIL_BACKEND</span></code></a> qui est utilisée.</p>\n<p>Le paramètre <code class=\"docutils literal notranslate\"><span class=\"pre\">reporter_class</span></code> de <code class=\"docutils literal notranslate\"><span class=\"pre\">AdminEmailHandler</span></code> permet de fournir une sous-classe de <code class=\"docutils literal notranslate\"><span class=\"pre\">django.views.debug.ExceptionReporter</span></code> pour personnaliser le texte de trace d’erreur envoyé dans le corps du courriel. Indiquez un chemin d’importation sous forme de chaîne vers la classe que vous souhaitez utiliser, comme ceci</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"s2\">&quot;handlers&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;mail_admins&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;level&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;ERROR&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;class&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.utils.log.AdminEmailHandler&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;include_html&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;reporter_class&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;somepackage.error_reporter.CustomErrorReporter&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.utils.log.AdminEmailHandler.send_mail\">\n<span class=\"sig-name descname\"><span class=\"pre\">send_mail</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">subject</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">message</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">args</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.log.AdminEmailHandler.send_mail\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Envoie des courriels aux utilisateurs administrateurs. Pour personnaliser ce comportement, vous pouvez créer une sous-classe de <a class=\"reference internal\" href=\"#django.utils.log.AdminEmailHandler\" title=\"django.utils.log.AdminEmailHandler\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AdminEmailHandler</span></code></a> et surcharger cette méthode.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"filters\">\n<h3>Filtres<a class=\"heading-anchor\" href=\"#filters\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django propose quelques filtres de journalisation en plus de ceux offerts par le module <code class=\"docutils literal notranslate\"><span class=\"pre\">logging</span></code> de Python.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.utils.log.CallbackFilter\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">CallbackFilter</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">callback</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.utils.log.CallbackFilter\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ce filtre accepte une fonction de rappel (qui ne doit accepter qu’un seul paramètre, l’enregistrement à journaliser) et appelle celle-ci pour chaque enregistrement qui transite par ce filtre. Le traitement de l’enregistrement s’arrête si la fonction de rappel renvoie <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.</p>\n<p>Par exemple, pour exclure <a class=\"reference internal\" href=\"/fr/5.0/ref/exceptions/#django.http.UnreadablePostError\" title=\"django.http.UnreadablePostError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">UnreadablePostError</span></code></a> (généré lorsqu’un utilisateur annule un téléversement) des courriels envoyés aux administrateurs, cette fonction de filtre pourrait être créée :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">UnreadablePostError</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">skip_unreadable_post</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">exc_info</span><span class=\"p\">:</span>\n        <span class=\"n\">exc_type</span><span class=\"p\">,</span> <span class=\"n\">exc_value</span> <span class=\"o\">=</span> <span class=\"n\">record</span><span class=\"o\">.</span><span class=\"n\">exc_info</span><span class=\"p\">[:</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">exc_value</span><span class=\"p\">,</span> <span class=\"n\">UnreadablePostError</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n    <span class=\"k\">return</span> <span class=\"kc\">True</span>\n</code></pre></div>\n<p>puis ajoutée à la configuration de journalisation :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">LOGGING</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"s2\">&quot;filters&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;skip_unreadable_posts&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;()&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.utils.log.CallbackFilter&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;callback&quot;</span><span class=\"p\">:</span> <span class=\"n\">skip_unreadable_post</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n    <span class=\"s2\">&quot;handlers&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;mail_admins&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;level&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;ERROR&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;filters&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;skip_unreadable_posts&quot;</span><span class=\"p\">],</span>\n            <span class=\"s2\">&quot;class&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.utils.log.AdminEmailHandler&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n    <span class=\"c1\"># ...</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.utils.log.RequireDebugFalse\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">RequireDebugFalse</span></span><a class=\"heading-anchor\" href=\"#django.utils.log.RequireDebugFalse\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ce filtre ne laisse passer les enregistrements que lorsque <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.DEBUG</span></code> vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.</p>\n<p>Ce filtre est utilisé comme le montre l’exemple ci-dessous dans la configuration par défaut de <a class=\"reference internal\" href=\"/fr/5.0/ref/settings/#std-setting-LOGGING\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOGGING</span></code></a> pour garantir que <a class=\"reference internal\" href=\"#django.utils.log.AdminEmailHandler\" title=\"django.utils.log.AdminEmailHandler\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AdminEmailHandler</span></code></a> n’envoie des courriels d’erreur aux administrateurs que lorsque <a class=\"reference internal\" href=\"/fr/5.0/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">LOGGING</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"s2\">&quot;filters&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;require_debug_false&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;()&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.utils.log.RequireDebugFalse&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n    <span class=\"s2\">&quot;handlers&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;mail_admins&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;level&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;ERROR&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;filters&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;require_debug_false&quot;</span><span class=\"p\">],</span>\n            <span class=\"s2\">&quot;class&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.utils.log.AdminEmailHandler&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n    <span class=\"c1\"># ...</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.utils.log.RequireDebugTrue\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">RequireDebugTrue</span></span><a class=\"heading-anchor\" href=\"#django.utils.log.RequireDebugTrue\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ce filtre est similaire à <a class=\"reference internal\" href=\"#django.utils.log.RequireDebugFalse\" title=\"django.utils.log.RequireDebugFalse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RequireDebugFalse</span></code></a>, sauf que les enregistrements ne sont retransmis que lorsque <a class=\"reference internal\" href=\"/fr/5.0/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n</dd></dl>\n\n</section>\n</section>","rootId":"logging","toc":[{"title":"Configuration de journalisation par défaut de Django","anchor":"django-s-default-logging-configuration","children":[{"title":"Conditions de journalisation par défaut","anchor":"default-logging-conditions","children":[]},{"title":"Définition de journalisation par défaut","anchor":"default-logging-definition","children":[]}]},{"title":"Extensions de journalisation de Django","anchor":"django-logging-extensions","children":[{"title":"Journaliseurs","anchor":"loggers","children":[{"title":"django","anchor":"django","children":[]},{"title":"django.request","anchor":"django-request","children":[]},{"title":"django.server","anchor":"django-server","children":[]},{"title":"django.template","anchor":"django-template","children":[]},{"title":"django.db.backends","anchor":"django-db-backends","children":[]},{"title":"django.utils.autoreload","anchor":"django-utils-autoreload","children":[]},{"title":"django.contrib.auth","anchor":"django-contrib-auth","children":[]},{"title":"django.contrib.gis","anchor":"django-contrib-gis","children":[]},{"title":"django.dispatch","anchor":"django-dispatch","children":[]},{"title":"django.security.*","anchor":"django-security","children":[]},{"title":"django.db.backends.schema","anchor":"django-db-backends-schema","children":[]}]},{"title":"Gestionnaires","anchor":"handlers","children":[]},{"title":"Filtres","anchor":"filters","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"Référence de l’API","url":"/fr/5.0/ref/"}],"prev":{"docname":"ref/forms/validation","title":"La validation de formulaires et de champs","url":"/fr/5.0/ref/forms/validation/"},"next":{"docname":"ref/middleware","title":"Intergiciels (« middleware »)","url":"/fr/5.0/ref/middleware/"},"formats":{"html":"/fr/5.0/ref/logging/","markdown":"/fr/5.0/ref/logging.md","json":"/fr/5.0/ref/logging.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/ref/logging.txt","official":"https://docs.djangoproject.com/fr/5.0/ref/logging/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}