{"title":"ロギングの設定と利用","version":"5.1","locale":"ja","docname":"howto/logging","url":"/ja/5.1/howto/logging/","canonical":"https://djangodocs.dev/ja/5.1/howto/logging/","summary":"参考 Django のロギング リファレンス Django のロギングの概要 Django はそのままで動作する デフォルトのロギング設定 を持っており、すぐに拡張可能です。 基本的なロギング呼び出しを作成する Link to this heading #…","html":"<span id=\"logging-how-to\"></span><h1>ロギングの設定と利用<a class=\"heading-anchor\" href=\"#how-to-configure-and-use-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.1/ref/logging/#logging-ref\"><span class=\"std std-ref\">Django のロギング リファレンス</span></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.1/topics/logging/#logging-explanation\"><span class=\"std std-ref\">Django のロギングの概要</span></a></p></li>\n</ul>\n</aside>\n<p>Django はそのままで動作する <a class=\"reference internal\" href=\"/ja/5.1/ref/logging/#default-logging-configuration\"><span class=\"std std-ref\">デフォルトのロギング設定</span></a> を持っており、すぐに拡張可能です。</p>\n<section id=\"make-a-basic-logging-call\">\n<h2>基本的なロギング呼び出しを作成する<a class=\"heading-anchor\" href=\"#make-a-basic-logging-call\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>ログメッセージをコード内から送信するには、コードにロギングの呼び出しを書く必要があります。</p>\n<aside class=\"admonition-don-t-be-tempted-to-use-logging-calls-in-settings-py admonition\">\n<p class=\"admonition-title\"><code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code> でログ呼び出しを使用しようとしないでください。</p>\n<p>Django のロギングは <code class=\"docutils literal notranslate\"><span class=\"pre\">setup()</span></code> 関数の一部として設定されるため、 <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code> でロギングを呼び出しても期待通りに動作しないかもしれません。ロギングを調べるには、以下の例で推奨されているようにビュー関数を使用してください。</p>\n</aside>\n<p>まず、Python の logging ライブラリをインポートし、<a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logging.getLogger\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">logging.getLogger()</span></code></a> でロガーのインスタンスを取得します。<code class=\"docutils literal notranslate\"><span class=\"pre\">getLogger()</span></code> メソッドに、ロガーとロガーが出力するレコードを識別するための名前を指定します。そのための良い方法は <code class=\"docutils literal notranslate\"><span class=\"pre\">__name__</span></code> を使用することです (これについては以下の <a class=\"reference internal\" href=\"#naming-loggers\"><span class=\"std std-ref\">ロガーの名前空間を使う</span></a> を参照してください)。これは、次のように、現在の Python モジュールの名前をドット区切りのパスで返します。</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\">import</span><span class=\"w\"> </span><span class=\"nn\">logging</span>\n\n<span class=\"n\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>この宣言はモジュール・レベルで行うのがよいとされています。</p>\n<p>そして、ビューなどの関数内で、logger にレコードを送信します。</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=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">some_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n    <span class=\"k\">if</span> <span class=\"n\">some_risky_state</span><span class=\"p\">:</span>\n        <span class=\"n\">logger</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"s2\">&quot;Platform is running at risk&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>このコードが実行されると、そのメッセージを含む <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logging.LogRecord\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LogRecord</span></code></a> が logger に送られます。Django のデフォルトの logging 設定を使っている場合、メッセージはコンソールに表示されます。</p>\n<p>上の例で使われている <code class=\"docutils literal notranslate\"><span class=\"pre\">WARNING</span></code> レベルは、いくつかある <a class=\"reference internal\" href=\"/ja/5.1/topics/logging/#topic-logging-parts-loggers\"><span class=\"std std-ref\">ログの重大度レベル</span></a>: <code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">INFO</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">WARNING</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>\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\">logger</span><span class=\"o\">.</span><span class=\"n\">critical</span><span class=\"p\">(</span><span class=\"s2\">&quot;Payment system is not responding&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-important\">\n<p class=\"admonition-title\">重要</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">WARNING</span></code> より低いレベルのレコードはデフォルトではコンソールに表示されません。この動作を変更するには追加の設定が必要です。</p>\n</aside>\n</section>\n<section id=\"customize-logging-configuration\">\n<h2>ロギングの設定をカスタマイズする<a class=\"heading-anchor\" href=\"#customize-logging-configuration\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Djangoのロギング設定は初期状態で動作しますが、追加の設定を行うことで、ログを様々な宛先（ログファイル、外部サービス、メールなど）に送信するのを正確にコントロールできます。</p>\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><a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logging.LogRecord\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LogRecord</span></code></a> オブジェクトを、人間や他のシステムで利用できるように文字列や他の形式に変換するためのフォーマッタ</p></li>\n</ul>\n<p>ロギングの設定には様々な方法があります。Django では、 <a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-LOGGING\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOGGING</span></code></a> 設定が最もよく使われます。この設定は <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> を使い、 <a class=\"reference internal\" href=\"/ja/5.1/ref/logging/#default-logging-definition\"><span class=\"std std-ref\">デフォルトのロギング設定</span></a> を拡張します。</p>\n<p>カスタム設定が Django のデフォルトとどのようにマージされるかについては <a class=\"reference internal\" href=\"/ja/5.1/topics/logging/#configuring-logging\"><span class=\"std std-ref\">ロギングを設定する</span></a> を参照してください。</p>\n<p>その他のロギングの設定方法の詳細については <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.config.html#module-logging.config\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">Python</span> <span class=\"pre\">logging</span> <span class=\"pre\">documentation</span></code></a> を参照してください。簡単にするために、このドキュメントでは <code class=\"docutils literal notranslate\"><span class=\"pre\">LOGGING</span></code> 設定による設定のみを考えます。</p>\n<section id=\"basic-logging-configuration\">\n<span id=\"basic-logger-configuration\"></span><h3>ロギングの基本的な設定<a class=\"heading-anchor\" href=\"#basic-logging-configuration\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>ロギングを設定する場合、以下のようにします。</p>\n<section id=\"create-a-logging-dictionary\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">LOGGING</span></code> 辞書を作成する<a class=\"heading-anchor\" href=\"#create-a-logging-dictionary\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</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=\"s2\">&quot;version&quot;</span><span class=\"p\">:</span> <span class=\"mi\">1</span><span class=\"p\">,</span>  <span class=\"c1\"># the dictConfig format version</span>\n    <span class=\"s2\">&quot;disable_existing_loggers&quot;</span><span class=\"p\">:</span> <span class=\"kc\">False</span><span class=\"p\">,</span>  <span class=\"c1\"># retain the default loggers</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>ほとんどの場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">disable_existing_loggers</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> に設定することで、デフォルトのロギング設定を保持し、拡張できます。</p>\n</section>\n<section id=\"configure-a-handler\">\n<h4>ハンドラを設定する<a class=\"heading-anchor\" href=\"#configure-a-handler\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>この例では、Python の <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.handlers.html#logging.FileHandler\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileHandler</span></code></a> を使って、レベル <code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code> 以上のログを (プロジェクトルート内の) <code class=\"docutils literal notranslate\"><span class=\"pre\">general.log</span></code> ファイルに保存する <code class=\"docutils literal notranslate\"><span class=\"pre\">file</span></code> という名前のハンドラを設定します:</p>\n<div class=\"code-block\" data-language=\"python\"><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=\"c1\"># ...</span>\n<span class=\"hll\">    <span class=\"s2\">&quot;handlers&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n</span><span class=\"hll\">        <span class=\"s2\">&quot;file&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n</span><span class=\"hll\">            <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><span class=\"hll\">            <span class=\"s2\">&quot;filename&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;general.log&quot;</span><span class=\"p\">,</span>\n</span><span class=\"hll\">        <span class=\"p\">},</span>\n</span><span class=\"hll\">    <span class=\"p\">},</span>\n</span><span class=\"p\">}</span>\n</code></pre></div>\n<p>異なるハンドラクラスは異なる設定オプションを取ります。利用可能なハンドラクラスの詳細については、 Django が提供する <a class=\"reference internal\" href=\"/ja/5.1/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> や Python が提供する様々な <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.handlers.html#module-logging.handlers\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">handler</span> <span class=\"pre\">class</span></code></a> を参照してください。</p>\n<p>ログレベルはハンドラで設定することもできます（デフォルトでは、ハンドラはすべてのレベルのログメッセージを受け取ります）。上の例を使うと、次のように書けます:</p>\n<div class=\"code-block\" data-language=\"python\"><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=\"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;general.log&quot;</span><span class=\"p\">,</span>\n<span class=\"hll\">    <span class=\"s2\">&quot;level&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;DEBUG&quot;</span><span class=\"p\">,</span>\n</span><span class=\"p\">}</span>\n</code></pre></div>\n<p>これで、レベル <code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code> 以上のレコードだけを受け付けるようにハンドラを設定できます。</p>\n</section>\n<section id=\"configure-a-logger-mapping\">\n<h4>ロガーマッピングを設定する<a class=\"heading-anchor\" href=\"#configure-a-logger-mapping\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>このハンドラにレコードを送信するには、ロガーマッピングをそのハンドラを使うように設定します。例えば:</p>\n<div class=\"code-block\" data-language=\"python\"><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=\"c1\"># ...</span>\n<span class=\"hll\">    <span class=\"s2\">&quot;loggers&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n</span><span class=\"hll\">        <span class=\"s2\">&quot;&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n</span><span class=\"hll\">            <span class=\"s2\">&quot;level&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;DEBUG&quot;</span><span class=\"p\">,</span>\n</span><span class=\"hll\">            <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><span class=\"hll\">        <span class=\"p\">},</span>\n</span><span class=\"hll\">    <span class=\"p\">},</span>\n</span><span class=\"p\">}</span>\n</code></pre></div>\n<p>マッピングの名前はどのログレコードを処理するかを決定します。この設定 (<code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;&quot;</span></code>) は <em>無名</em> です。つまり、 <em>すべての</em> ロガーからのレコードを処理します（レコードを処理するロガーを決定するためにマッピング名を使用する方法については、以下の <a class=\"reference internal\" href=\"#naming-loggers\"><span class=\"std std-ref\">ロガーの名前空間を使う</span></a> を参照してください）。</p>\n<p>これは <code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code> レベル以上のメッセージを <code class=\"docutils literal notranslate\"><span class=\"pre\">file</span></code> というハンドラーに転送します。</p>\n<p>ロガーは複数のハンドラーにメッセージを転送できるので、ロガーとハンドラーの関係は多対多であることに注意してください。</p>\n<p>このコードを実行したら、:</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\">logger</span><span class=\"o\">.</span><span class=\"n\">debug</span><span class=\"p\">(</span><span class=\"s2\">&quot;Attempting to connect to API&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>プロジェクトルートの <code class=\"docutils literal notranslate\"><span class=\"pre\">general.log</span></code> ファイルにそのメッセージが保存されるでしょう。</p>\n</section>\n<section id=\"configure-a-formatter\">\n<h4>フォーマッタを設定する<a class=\"heading-anchor\" href=\"#configure-a-formatter\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>デフォルトでは、最終的なログ出力には各 <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logging.LogRecord\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">log</span> <span class=\"pre\">record</span></code></a> のメッセージ部分が含まれます。追加データを含めたい場合はフォーマッタを使います。まずフォーマッタに名前を付けて定義します。この例では <code class=\"docutils literal notranslate\"><span class=\"pre\">verbose</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">simple</span></code> という名前のフォーマッタを定義しています:</p>\n<div class=\"code-block\" data-language=\"python\"><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=\"c1\"># ...</span>\n<span class=\"hll\">    <span class=\"s2\">&quot;formatters&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n</span><span class=\"hll\">        <span class=\"s2\">&quot;verbose&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n</span><span class=\"hll\">            <span class=\"s2\">&quot;format&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;</span><span class=\"si\">{name}</span><span class=\"s2\"> </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><span class=\"hll\">            <span class=\"s2\">&quot;style&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;{&quot;</span><span class=\"p\">,</span>\n</span><span class=\"hll\">        <span class=\"p\">},</span>\n</span><span class=\"hll\">        <span class=\"s2\">&quot;simple&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n</span><span class=\"hll\">            <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><span class=\"hll\">            <span class=\"s2\">&quot;style&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;{&quot;</span><span class=\"p\">,</span>\n</span><span class=\"hll\">        <span class=\"p\">},</span>\n</span><span class=\"hll\">    <span class=\"p\">},</span>\n</span><span class=\"p\">}</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">style</span></code> キーワードを使用すると、 <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#str.format\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">str.format()</span></code></a> 用の <code class=\"docutils literal notranslate\"><span class=\"pre\">{</span></code> または <a class=\"reference external\" href=\"https://docs.python.org/3/library/string.html#string.Template\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">string.Template</span></code></a> フォーマット用の <code class=\"docutils literal notranslate\"><span class=\"pre\">$</span></code> を指定できます。デフォルトは <code class=\"docutils literal notranslate\"><span class=\"pre\">$</span></code> です。</p>\n<p>含めることができる <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logging.LogRecord\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LogRecord</span></code></a> 属性については <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logrecord-attributes\" title=\"(in Python v3.14)\"><span>LogRecord attributes</span></a> を参照してください。</p>\n<p>ハンドラにフォーマッタを適用するには、ハンドラの辞書に <code class=\"docutils literal notranslate\"><span class=\"pre\">formatter</span></code> エントリを追加します:</p>\n<div class=\"code-block\" data-language=\"python\"><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=\"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;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;general.log&quot;</span><span class=\"p\">,</span>\n<span class=\"hll\">        <span class=\"s2\">&quot;formatter&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;verbose&quot;</span><span class=\"p\">,</span>\n</span>    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n</section>\n<section id=\"use-logger-namespacing\">\n<span id=\"naming-loggers\"></span><h4>ロガーの名前空間を使う<a class=\"heading-anchor\" href=\"#use-logger-namespacing\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>無名のロギング設定 <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;&quot;</span></code> は任意の Python アプリケーションからログを取り込みます。名前付きロギング設定は、一致する名前のロガーからだけログを取得します。</p>\n<p>logger インスタンスの名前空間は <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logging.getLogger\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">getLogger()</span></code></a> を使って定義します。例えば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">views.py</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\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"vm\">__name__</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これは <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views</span></code> 名前空間にロガーを作成します。 <code class=\"docutils literal notranslate\"><span class=\"pre\">__name__</span></code> を使うと、プロジェクト内のアプリケーションにおけるログメッセージの出所に基づいて、自動的にそれらを整理できます。また、それによって名前の衝突が起こらなくなります。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views</span></code> という名前のロガーマッピングは、このロガーからレコードを取得します:</p>\n<div class=\"code-block\" data-language=\"python\"><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=\"c1\"># ...</span>\n    <span class=\"s2\">&quot;loggers&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n<span class=\"hll\">        <span class=\"s2\">&quot;my_app.views&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"o\">...</span><span class=\"p\">},</span>\n</span>    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">my_app</span></code> という名前のロガーマッピングはより広く、 <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app</span></code> 名前空間内のロガー（<code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.utils</span></code> などを含む）からレコードを取得します:</p>\n<div class=\"code-block\" data-language=\"python\"><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=\"c1\"># ...</span>\n    <span class=\"s2\">&quot;loggers&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n<span class=\"hll\">        <span class=\"s2\">&quot;my_app&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"o\">...</span><span class=\"p\">},</span>\n</span>    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>ロガーの名前空間を明示的に定義することもできます:</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\">logger</span> <span class=\"o\">=</span> <span class=\"n\">logging</span><span class=\"o\">.</span><span class=\"n\">getLogger</span><span class=\"p\">(</span><span class=\"s2\">&quot;project.payment&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>そして、それに応じてロガーマッピングを設定することもできます。</p>\n<section id=\"using-logger-hierarchies-and-propagation\">\n<span id=\"naming-loggers-hierarchy\"></span><h5>ロガーの階層と伝搬（propagation）を使う<a class=\"heading-anchor\" href=\"#using-logger-hierarchies-and-propagation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h5>\n<p>ロガーの命名は <em>階層的</em> です。 <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views</span></code> の親であり、 <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views.private</span></code> の親です。特に指定がない限り、ロガーのマッピングは処理したレコードを親に伝播（propagate）します―― <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views.private</span></code> 名前空間のロガーからのレコードは、 <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views</span></code> の両方のマッピングで処理されます。</p>\n<p>この動作を管理するには、定義したマッピングに <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;propagate&quot;</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;loggers&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;my_app&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"c1\"># ...</span>\n        <span class=\"p\">},</span>\n        <span class=\"s2\">&quot;my_app.views&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"c1\"># ...</span>\n        <span class=\"p\">},</span>\n        <span class=\"s2\">&quot;my_app.views.private&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"c1\"># ...</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><code class=\"docutils literal notranslate\"><span class=\"pre\">propagate</span></code> のデフォルトは <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> です。この例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views.private</span></code> のログは親プロセスでは処理されませんが、 <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views</span></code> のログは親プロセスで処理されます。</p>\n</section>\n</section>\n</section>\n<section id=\"configure-responsive-logging\">\n<h3>レスポンシブなロギングを設定する<a class=\"heading-anchor\" href=\"#configure-responsive-logging\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>ロギングは、必要な情報ができるだけ多く含まれているときに最も有用であり、目的のために必要な情報だけが含まれているとなお嬉しいです。そして、必要な情報量は、あなたが何をしているかによって異なります。デバッグ中には、本番環境では過剰で役に立たないようなレベルの情報が必要になります。</p>\n<p>必要な時に必要な詳細レベルを提供するように、ロギングを設定できます。これを実現するために手動で設定を変更するよりも良い方法は、環境に応じて自動的に設定を適用することです。</p>\n<p>例えば、開発環境とステージング環境で環境変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">DJANGO_LOG_LEVEL</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=\"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;WARNING&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>- 環境がより低いログレベルを指定しない限り、このコンフィギュレーションは重大度 <code class=\"docutils literal notranslate\"><span class=\"pre\">WARNING</span></code> 以上のレコードだけをハンドラに転送します。</p>\n<p>設定の他のオプション（ハンドラの <code class=\"docutils literal notranslate\"><span class=\"pre\">level</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">formatter</span></code> オプションなど）も同様に管理できます。</p>\n</section>\n</section>","rootId":"how-to-configure-and-use-logging","toc":[{"title":"基本的なロギング呼び出しを作成する","anchor":"make-a-basic-logging-call","children":[]},{"title":"ロギングの設定をカスタマイズする","anchor":"customize-logging-configuration","children":[{"title":"ロギングの基本的な設定","anchor":"basic-logging-configuration","children":[{"title":"LOGGING 辞書を作成する","anchor":"create-a-logging-dictionary","children":[]},{"title":"ハンドラを設定する","anchor":"configure-a-handler","children":[]},{"title":"ロガーマッピングを設定する","anchor":"configure-a-logger-mapping","children":[]},{"title":"フォーマッタを設定する","anchor":"configure-a-formatter","children":[]},{"title":"ロガーの名前空間を使う","anchor":"use-logger-namespacing","children":[{"title":"ロガーの階層と伝搬（propagation）を使う","anchor":"using-logger-hierarchies-and-propagation","children":[]}]}]},{"title":"レスポンシブなロギングを設定する","anchor":"configure-responsive-logging","children":[]}]}],"breadcrumbs":[{"docname":"howto/index","title":"How-to ガイド","url":"/ja/5.1/howto/"}],"prev":{"docname":"howto/static-files/index","title":"静的ファイル (画像、JavaScript、CSS など) を管理する","url":"/ja/5.1/howto/static-files/"},"next":{"docname":"howto/error-reporting","title":"エラーレポートの管理","url":"/ja/5.1/howto/error-reporting/"},"formats":{"html":"/ja/5.1/howto/logging/","markdown":"/ja/5.1/howto/logging.md","json":"/ja/5.1/howto/logging.json"},"source":"https://github.com/django/django/blob/stable/5.1.x/docs/howto/logging.txt","official":"https://docs.djangoproject.com/ja/5.1/howto/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"]}