{"title":"ロギング","version":"5.0","locale":"ja","docname":"topics/logging","url":"/ja/5.0/topics/logging/","canonical":"https://djangodocs.dev/ja/5.0/topics/logging/","summary":"参考 ロギングの設定と利用 Django ロギング リファレンス Python プログラマは、素早く便利なデバッグツールとして、コード内で print()…","html":"<span id=\"logging-explanation\"></span><h1>ロギング<a class=\"heading-anchor\" href=\"#logging\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/ja/5.0/howto/logging/#logging-how-to\"><span class=\"std std-ref\">ロギングの設定と利用</span></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.0/ref/logging/#logging-ref\"><span class=\"std std-ref\">Django ロギング リファレンス</span></a></p></li>\n</ul>\n</aside>\n<p>Python プログラマは、素早く便利なデバッグツールとして、コード内で <code class=\"docutils literal notranslate\"><span class=\"pre\">print()</span></code> をよく使います。ロギングフレームワークを使用するのはわずかな手間がかかるだけですが、それよりはるかにエレガントで柔軟です。デバッギングに便利であることに加えて、ロギングは、アプリケーションの状態と健全性に対して、よりよく構造化されたより多くの情報も提供してくれます。</p>\n<section id=\"overview\">\n<h2>概要<a class=\"heading-anchor\" href=\"#overview\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django は、システムのロギングを実行するために、Python 組み込みの <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#module-logging\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">logging</span></code></a> モジュールを使用・拡張しています。このモジュールは、Python 自体のドキュメントで詳細に解説されています。このセクションでは、簡単な概要を説明します。</p>\n<section id=\"the-cast-of-players\">\n<h3>登場人物<a class=\"heading-anchor\" href=\"#the-cast-of-players\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Pythonのロギングは4つの部分で構成されます。</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"#topic-logging-parts-loggers\"><span class=\"std std-ref\">ロガー</span></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#topic-logging-parts-handlers\"><span class=\"std std-ref\">ハンドラ</span></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#topic-logging-parts-filters\"><span class=\"std std-ref\">フィルタ</span></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#topic-logging-parts-formatters\"><span class=\"std std-ref\">フォーマッタ</span></a></p></li>\n</ul>\n<section id=\"loggers\">\n<span id=\"topic-logging-parts-loggers\"></span><h4>ロガー<a class=\"heading-anchor\" href=\"#loggers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><em>ロガー</em> は、ロギングシステムのエントリーポイントです。各ロガーは処理が記述されたメッセージの名前付けされたバケットです。</p>\n<p>ロガーには <em>ログレベル</em> が設定されています。このログレベルはハンドリングされたログメッセージの深刻さを表しています。Pythonは下記のログレベルを定義しています。</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code>: デバッグのための低レベルシステム情報</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">INFO</span></code>: 一般的なシステム情報</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">WARNING</span></code>: 重要度の小さい問題が発生したことを示す情報</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">ERROR</span></code>: 大きな問題が発生したことを示す情報</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">CRITICAL</span></code>: 重大な問題が発生したことを示す情報</p></li>\n</ul>\n<p>ロガーに記載された各メッセージは <em>ログレコード</em> です。各ログレコードは、特定のメッセージの重要性を表す <em>ログレベル</em> を持ちます。ログレコードには、記録されたイベントを説明するメタデータを含むことができます。これには、スタックトレースやエラーコードと言った詳細を含めることができます。</p>\n<p>ロガーにメッセージが渡されたとき、メッセージのログレベルはロガーのログレベルと比較されます。メッセージのログレベルがロガー自体のログレベルと同等以上の場合、メッセージは次の処理に進みます。それ以外の場合、メッセージは無視されます。</p>\n<p>ロガーによってメッセージの処理が必要だと判断された場合、メッセージは <em>ハンドラ</em> に渡されます。</p>\n</section>\n<section id=\"handlers\">\n<span id=\"topic-logging-parts-handlers\"></span><h4>ハンドラ<a class=\"heading-anchor\" href=\"#handlers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><em>ハンドラ</em> は、ロガー上で書くメッセージに何をするかを決定するための原動力です。ここで、メッセージを表示する、ファイルに書き込む、ネットワークソケットに送信する、といった特定のロギング動作を記述します。</p>\n<p>ロガーと同様に、ハンドラもログレベルを持ちます。ログレコードのログレベルがハンドラのレベルに満たない場合、ハンドラはメッセージを無視します。</p>\n<p>ロガーには複数のハンドラを設定でき、また各ハンドラは異なるログレベルを持つことができます。この方法により、メッセージの重要性に応じて通知方法を変えることができます。たとえば、<code class=\"docutils literal notranslate\"><span class=\"pre\">ERROR</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">CRITICAL</span></code> メッセージを呼び出しサービスに転送するハンドラを設定する一方で、後で分析するために (<code class=\"docutils literal notranslate\"><span class=\"pre\">ERROR</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">CRITICAL</span></code> も含む) すべてのメッセージをファイルに記録する 2 つめのハンドラを設定できます。</p>\n</section>\n<section id=\"filters\">\n<span id=\"topic-logging-parts-filters\"></span><h4>フィルタ<a class=\"heading-anchor\" href=\"#filters\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><em>フィルタ</em> は、どのログレコードがロガーからハンドラへ渡されるかについて、追加的なコントロールを提供します。</p>\n<p>デフォルトでは、ログレベル要件を満たしたすべてのログメッセージが処理されます。しかし、フィルタを使用することで、ロギングのプロセスに追加的な要件を設定できます。たとえば、特定のソースからの <code class=\"docutils literal notranslate\"><span class=\"pre\">ERROR</span></code> のみを処理するようにフィルタを設定することができます。</p>\n<p>フィルタは、処理前にログレコードを修正するためにも使えます。たとえば、特定の条件を満たした場合に <code class=\"docutils literal notranslate\"><span class=\"pre\">ERROR</span></code> ログレコードを <code class=\"docutils literal notranslate\"><span class=\"pre\">WARNING</span></code> レコードに格下げさせるようなフィルタを設定できます。</p>\n<p>フィルタは、ロガーもしくはハンドラに対して設定できます; 複数のフィルタを使って複数のフィルタ動作を連鎖させることも可能です。</p>\n</section>\n<section id=\"formatters\">\n<span id=\"topic-logging-parts-formatters\"></span><h4>フォーマッタ<a class=\"heading-anchor\" href=\"#formatters\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>最終的には、ログレコードはテキストとして表現される必要があります。 <em>フォーマッタ</em> はこのテキストの書式を定義します。フォーマッタは、通常は Python の文字列フォーマットで、<a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logrecord-attributes\" title=\"(in Python v3.14)\"><span class=\"xref std std-ref\">LogRecord 属性</span></a> を含みます; しかし、特定の書式設定を行うような独自のフォーマッタを記述することもできます。</p>\n</section>\n</section>\n</section>\n<section id=\"security-implications\">\n<span id=\"logging-security-implications\"></span><h2>セキュリティへの影響<a class=\"heading-anchor\" href=\"#security-implications\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>ロギングシステムは潜在的にセンシティブな情報を取り扱うことになります。たとえば、ログレコードにはウェブリクエストやスタックトレースに関する情報が含まれることがありますが、ロガーで収集されたデータの一部にはセキュリティへの影響もあるかもしれません。あなたは次のことを理解しておく必要があります。</p>\n<ul class=\"simple\">\n<li><p>どの情報を収集するか</p></li>\n<li><p>最終的にその情報はどこに保存されることになるか</p></li>\n<li><p>その情報の転送はどのように行われるか</p></li>\n<li><p>その情報にアクセスする可能性があるのは誰か</p></li>\n</ul>\n<p>センシティブな情報の収集をコントロールするために、特定のセンシティブな情報をエラーレポートからフィルタリングするように明示的に指定できます。その方法については <a class=\"reference internal\" href=\"/ja/5.0/howto/error-reporting/#filtering-error-reports\"><span class=\"std std-ref\">エラーレポートをフィルタリングする</span></a> を参照してください。</p>\n<section id=\"adminemailhandler\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">AdminEmailHandler</span></code><a class=\"heading-anchor\" href=\"#adminemailhandler\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>組み込みの <a class=\"reference internal\" href=\"/ja/5.0/ref/logging/#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> はセキュリティの文脈で言及に値します。もし <code class=\"docutils literal notranslate\"><span class=\"pre\">include_html</span></code> オプションが有効なら、送信するメールには、スタックの各レベルのローカル変数の名前と値、そして Django の設定値（言い換えれば、 <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> のときに Web ページで公開されるのと同じレベルの詳細）が完全なトレースバックとして含まれます。</p>\n<p>通常、このような潜在的にセンシティブな情報を電子メールで送信するのは良くないとされています。その代わりに、詳細なログを送信できる多くのサードパーティ・サービスを利用することで、完全なトレースバックによる豊富な情報、通知先や情報へのアクセス権の明確な管理など、複数の利点が得られます。</p>\n</section>\n</section>\n<section id=\"configuring-logging\">\n<span id=\"id1\"></span><h2>ロギングを設定する<a class=\"heading-anchor\" href=\"#configuring-logging\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Python のロギングライブラリは、実用的なインターフェースから設定ファイルまで、ロギング設定のテクニックを提供しています。デフォルトでは、Django は <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.config.html#logging-config-dictschema\" title=\"(in Python v3.14)\"><span class=\"xref std std-ref\">dictConfig フォーマット</span></a> を使用します。</p>\n<p>ロギングを設定するためには、<a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-LOGGING\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOGGING</span></code></a> を使用してロギング設定の辞書を定義します。この設定には、ロギングセットアップで使いたいロガー、ハンドラ、フィルタ、フォーマッタを記述し、それらのコンポーネントで使用したいログレベルとその他のプロパティを記述します。</p>\n<p>デフォルトでは、<a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-LOGGING\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOGGING</span></code></a> 設定は、以下のスキームを使って <a class=\"reference internal\" href=\"/ja/5.0/ref/logging/#default-logging-configuration\"><span class=\"std std-ref\">Django のデフォルトロギング設定</span></a> に統合されています。</p>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-LOGGING\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOGGING</span></code></a> の <code class=\"docutils literal notranslate\"><span class=\"pre\">disable_existing_loggers</span></code> キーの値を <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> にすると、全てのデフォルトの設定が無効になります（キーが存在しない場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">dictConfig</span></code> のデフォルトになります）。このため、 <code class=\"docutils literal notranslate\"><span class=\"pre\">'disable_existing_loggers':</span> <span class=\"pre\">True</span></code> を使う場合は注意してください。 <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を設定する必要は殆どないでしょう。 <code class=\"docutils literal notranslate\"><span class=\"pre\">disable_existing_loggers</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> に設定して、デフォルトのロガーの一部、または全てを定義しなおすこともできます。あるいは、 <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-LOGGING_CONFIG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOGGING_CONFIG</span></code></a> を <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> に設定して、 <a class=\"reference internal\" href=\"#disabling-logging-configuration\"><span class=\"std std-ref\">ロギングの設定を自分で行うこと</span></a> も出来ます。</p>\n<p>ロギングは、一般的な Django の <code class=\"docutils literal notranslate\"><span class=\"pre\">setup()</span></code> 関数の一部として設定されます。したがって、ロガーが常にプロジェクトコード内で使用準備ができていることが保証されています。</p>\n<section id=\"examples\">\n<h3>例<a class=\"heading-anchor\" href=\"#examples\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.config.html#logging-config-dictschema\" title=\"(in Python v3.14)\"><span class=\"xref std std-ref\">dictConfig フォーマット</span></a> に関する完全なドキュメントが、ロギング設定ディクショナリの最高の教材です。とはいえ、どんなことが可能なのか知ってもらうため、以下にいくつかの例を示します。</p>\n<p>最初に、全てのログメッセージをコンソールに出力するための最低限の設定がこちらです。</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">os</span>\n\n<span class=\"n\">LOGGING</span> <span class=\"o\">=</span> <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;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;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=\"p\">},</span>\n    <span class=\"s2\">&quot;root&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>\n        <span class=\"s2\">&quot;level&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;WARNING&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></figure>\n<p>この設定では、 <code class=\"docutils literal notranslate\"><span class=\"pre\">root</span></code> という名前の親のロガーがあり、 <code class=\"docutils literal notranslate\"><span class=\"pre\">WARNING</span></code> レベル以上のメッセージを受け取ったら、 console ハンドラに送るようになっています。 level を <code class=\"docutils literal notranslate\"><span class=\"pre\">INFO</span></code> または <code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code> にすると、より詳細なメッセージも表示されるようになります。この設定は開発中に役に立ちます。</p>\n<p>次に、より詳細なロギングを追加します。次の例は、ロギングシステムが <a class=\"reference internal\" href=\"/ja/5.0/ref/logging/#django-logger\"><span class=\"std std-ref\">django</span></a> という名前のロガーからより多くのメッセージを出力するようにする方法を示しています。</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">os</span>\n\n<span class=\"n\">LOGGING</span> <span class=\"o\">=</span> <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;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;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=\"p\">},</span>\n    <span class=\"s2\">&quot;root&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>\n        <span class=\"s2\">&quot;level&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;WARNING&quot;</span><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>\n            <span class=\"s2\">&quot;level&quot;</span><span class=\"p\">:</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">getenv</span><span class=\"p\">(</span><span class=\"s2\">&quot;DJANGO_LOG_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></figure>\n<p>デフォルトでは、この設定は、<code class=\"docutils literal notranslate\"><span class=\"pre\">INFO</span></code> 以上のメッセージを <code class=\"docutils literal notranslate\"><span class=\"pre\">django</span></code> ロガーからコンソールに送信します。このレベルは、デフォルト設定ではログレコードを表示するのが <code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG=True</span></code> のときだけであること以外、Django のデフォルトのロギング設定と同じです。Django はそのような <code class=\"docutils literal notranslate\"><span class=\"pre\">INFO</span></code> レベルのログはそこまで多くログ出力しません。しかし、この設定では、環境変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">DJANGO_LOG_LEVEL=DEBUG</span></code> を設定することで、Django のすべての debug ログを表示できます。これにはすべてのデータベースクエリが含まれるため、非常に冗長です。</p>\n<p>必ずしもコンソールに出力する必要はありません。<a class=\"reference internal\" href=\"/ja/5.0/ref/logging/#django-logger\"><span class=\"std std-ref\">django</span></a> という名前のロガーをファイルに書き込むには、次のように設定します。</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"n\">LOGGING</span> <span class=\"o\">=</span> <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;handlers&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;file&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;DEBUG&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;class&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;logging.FileHandler&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;filename&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;/path/to/django/debug.log&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;file&quot;</span><span class=\"p\">],</span>\n            <span class=\"s2\">&quot;level&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;DEBUG&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;propagate&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<span class=\"p\">}</span>\n</code></pre></figure>\n<p>この例を使用するときは、<code class=\"docutils literal notranslate\"><span class=\"pre\">'filename'</span></code> のパスを Django アプリケーションを実行しているユーザーが書き込み可能な場所に変更してください。</p>\n<p>最後に、かなり複雑なロギングの設定の例です。</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"n\">LOGGING</span> <span class=\"o\">=</span> <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;formatters&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;verbose&quot;</span><span class=\"p\">:</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\">{levelname}</span><span class=\"s2\"> </span><span class=\"si\">{asctime}</span><span class=\"s2\"> </span><span class=\"si\">{module}</span><span class=\"s2\"> </span><span class=\"si\">{process:d}</span><span class=\"s2\"> </span><span class=\"si\">{thread:d}</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=\"s2\">&quot;simple&quot;</span><span class=\"p\">:</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\">{levelname}</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;filters&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;special&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;project.logging.SpecialFilter&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;bar&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;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=\"s2\">&quot;formatter&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;simple&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;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;filters&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;special&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>\n            <span class=\"s2\">&quot;propagate&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n        <span class=\"s2\">&quot;django.request&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;mail_admins&quot;</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;propagate&quot;</span><span class=\"p\">:</span> <span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n        <span class=\"s2\">&quot;myproject.custom&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=\"s2\">&quot;filters&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;special&quot;</span><span class=\"p\">],</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></figure>\n<p>このロギング設定は、以下のことを行います:</p>\n<ul>\n<li><p>設定が「dictConfig バージョン 1」形式であることを明示します。 現在、これが唯一の dictConfig 形式のバージョンです。</p></li>\n<li><p>2 つのフォーマッタを定義します:</p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">simple</span></code> は、ログレベル名 (例: <code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code>) とログメッセージを出力します。</p>\n<p>この <code class=\"docutils literal notranslate\"><span class=\"pre\">format</span></code> 文字列は標準の Python 文字列フォーマットで、各ログ行で出力される詳細を定義します。出力可能な詳細の全リストは <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#formatter-objects\" title=\"(in Python v3.14)\"><span>Formatter Objects</span></a> で確認できます。</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">verbose</span></code> は、ログレベルの名称とログメッセージに加えて、時刻、プロセス、スレッド、ログメッセージを生成したモジュールを出力します。</p></li>\n</ul>\n</li>\n<li><p>2 つのフィルタを定義します:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">project.logging.SpecialFilter</span></code> は、エイリアス <code class=\"docutils literal notranslate\"><span class=\"pre\">special</span></code> を使っています。もしこのフィルタが追加の引数を必要とする場合、フィルタ設定の辞書に追加のキーとして提供できます。今回の場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">SpecialFilter</span></code> をインスタンス化するときに、引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">foo</span></code> に <code class=\"docutils literal notranslate\"><span class=\"pre\">bar</span></code> の値が与えられます。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">django.utils.log.RequireDebugTrue</span></code> は、<a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> のときにレコードの処理を進めます。</p></li>\n</ul>\n</li>\n<li><p>2 つのハンドラを定義します:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">console</span></code> は、すべての <code class=\"docutils literal notranslate\"><span class=\"pre\">INFO</span></code> 以上のメッセージを <code class=\"docutils literal notranslate\"><span class=\"pre\">sys.stderr</span></code> に表示 (print) する <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.handlers.html#logging.StreamHandler\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">StreamHandler</span></code></a> クラスです。このハンドラは <code class=\"docutils literal notranslate\"><span class=\"pre\">simple</span></code> 出力フォーマットを使用します。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">mail_admins</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">ERROR</span></code> (またはそれより上) のすべてのメッセージをサイトの <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-ADMINS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ADMINS</span></code></a> にメール送信する <a class=\"reference internal\" href=\"/ja/5.0/ref/logging/#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> クラスです。このハンドラは <code class=\"docutils literal notranslate\"><span class=\"pre\">special</span></code> フィルタを使用します。</p></li>\n</ul>\n</li>\n<li><p>3 つのロガーを設定します:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">django</span></code> は、すべてのメッセージを <code class=\"docutils literal notranslate\"><span class=\"pre\">console</span></code> ハンドラに渡します。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">django.request</span></code> は、すべての <code class=\"docutils literal notranslate\"><span class=\"pre\">ERROR</span></code> メッセージを <code class=\"docutils literal notranslate\"><span class=\"pre\">mail_admins</span></code> ハンドラに渡します。加えて、このロガーはメッセージを親に <em>伝えない</em> よう設定されています。これは、<code class=\"docutils literal notranslate\"><span class=\"pre\">django.request</span></code> 内に記述されたログメッセージは <code class=\"docutils literal notranslate\"><span class=\"pre\">django</span></code> ロガーで処理されないことを意味します。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">myproject.custom</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">INFO</span></code> もしくはそれ以上のすべてのメッセージを渡し、<code class=\"docutils literal notranslate\"><span class=\"pre\">special</span></code> フィルタを 2 つのハンドラに引き渡します -- <code class=\"docutils literal notranslate\"><span class=\"pre\">console</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">mail_admins</span></code> です。これは、<code class=\"docutils literal notranslate\"><span class=\"pre\">INFO</span></code> 以上のレベルのメッセージがコンソールで表示され、さらに <code class=\"docutils literal notranslate\"><span class=\"pre\">ERROR</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">CRITICAL</span></code> のメッセージはメールでも出力されることを意味します。</p></li>\n</ul>\n</li>\n</ul>\n</section>\n<section id=\"custom-logging-configuration\">\n<h3>カスタムのロギング設定<a class=\"heading-anchor\" href=\"#custom-logging-configuration\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>ロガーの設定に Python の dictConfig フォーマットを使用したくない場合は、あなた自身の設定スキームを定義できます。</p>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-LOGGING_CONFIG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOGGING_CONFIG</span></code></a> 設定は、Django のロガーを設定するために使われる呼び出し可能関数を定義します。デフォルトでは、Python の <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.config.html#logging.config.dictConfig\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">logging.config.dictConfig()</span></code></a> 関数を指します。しかし、異なる設定処理を使いたい場合は、他の引数を1つ取る任意の呼び出し可能関数を使用できます。<a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-LOGGING\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOGGING</span></code></a> のコンテンツは、ロギング設定時に引数の値として提供されます。</p>\n</section>\n<section id=\"disabling-logging-configuration\">\n<span id=\"id2\"></span><h3>ロギング設定を無効化する<a class=\"heading-anchor\" href=\"#disabling-logging-configuration\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>ロギングを全く設定したくない (あるいは、自分のやり方でロギング手動で設定したい) なら、 <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-LOGGING_CONFIG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOGGING_CONFIG</span></code></a> を <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> に設定することもできます。これにより、<a class=\"reference internal\" href=\"/ja/5.0/ref/logging/#default-logging-configuration\"><span class=\"std std-ref\">Django のデフォルトのロギング設定</span></a> を無効化できます。</p>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-LOGGING_CONFIG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOGGING_CONFIG</span></code></a> を <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> に設定すると、自動でロギングの設定が行われなくなるだけです。ロギング自体が使えなくなるわけではありません。自動でのロギング設定を無効化しても、Django はロギングのメソッドを呼び、もしログ設定がされていれば、そこに出力されます。</p>\n<p>Django の自動でのロギング設定を無効化し、手動で設定する場合はこのようにします。</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"n\">LOGGING_CONFIG</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n<span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">logging.config</span>\n\n<span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">config</span><span class=\"o\">.</span><span class=\"n\">dictConfig</span><span class=\"p\">(</span><span class=\"o\">...</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>デフォルトの設定処理は、設定が完全にロードされた後にのみ <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-LOGGING_CONFIG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOGGING_CONFIG</span></code></a> を呼ばないことに注意してください。対照的に、設定ファイル内で手動で設定するロギングは、ロギング設定を直ちにロードします。そのため、ロギング設定は、必ずロギングが依存しているすべての設定の <em>後に</em> 書く必要があります。</p>\n</section>\n</section>","rootId":"logging","toc":[{"title":"概要","anchor":"overview","children":[{"title":"登場人物","anchor":"the-cast-of-players","children":[{"title":"ロガー","anchor":"loggers","children":[]},{"title":"ハンドラ","anchor":"handlers","children":[]},{"title":"フィルタ","anchor":"filters","children":[]},{"title":"フォーマッタ","anchor":"formatters","children":[]}]}]},{"title":"セキュリティへの影響","anchor":"security-implications","children":[{"title":"AdminEmailHandler","anchor":"adminemailhandler","children":[]}]},{"title":"ロギングを設定する","anchor":"configuring-logging","children":[{"title":"例","anchor":"examples","children":[]},{"title":"カスタムのロギング設定","anchor":"custom-logging-configuration","children":[]},{"title":"ロギング設定を無効化する","anchor":"disabling-logging-configuration","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Django を使う","url":"/ja/5.0/topics/"}],"prev":{"docname":"topics/i18n/timezones","title":"タイムゾーン","url":"/ja/5.0/topics/i18n/timezones/"},"next":{"docname":"topics/pagination","title":"ページ分割 (Pagination)","url":"/ja/5.0/topics/pagination/"},"formats":{"html":"/ja/5.0/topics/logging/","markdown":"/ja/5.0/topics/logging.md","json":"/ja/5.0/topics/logging.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/topics/logging.txt","official":"https://docs.djangoproject.com/ja/5.0/topics/logging/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}