{"title":"Bagaimana mengkonfigurasi dan menggunakan pencatatan","version":"6.0","locale":"id","docname":"howto/logging","url":"/id/6.0/howto/logging/","canonical":"https://djangodocs.dev/id/6.0/howto/logging/","summary":"Lihat juga Django logging reference Django logging overview Django menyediakan kerja default logging configuration yang mudah diperpanjang. Membuat panggilan…","html":"<span id=\"logging-how-to\"></span><h1>Bagaimana mengkonfigurasi dan menggunakan pencatatan<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\">Lihat juga</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/id/6.0/ref/logging/#logging-ref\"><span class=\"std std-ref\">Django logging reference</span></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/id/6.0/topics/logging/#logging-explanation\"><span class=\"std std-ref\">Django logging overview</span></a></p></li>\n</ul>\n</aside>\n<p>Django menyediakan kerja <a class=\"reference internal\" href=\"/id/6.0/ref/logging/#default-logging-configuration\"><span class=\"std std-ref\">default logging configuration</span></a> yang mudah diperpanjang.</p>\n<section id=\"make-a-basic-logging-call\">\n<h2>Membuat panggilan pencatatan dasar<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>Untuk mengirim pesan catatan dari dalam kode anda, anda dapat menempatkan panggilan pencatatan kedalamnya.</p>\n<aside class=\"admonition-don-t-be-tempted-to-use-logging-calls-in-settings-py admonition\">\n<p class=\"admonition-title\">Jangan tergoda untuk menggunakan panggilan pencatatan dalam <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code>.</p>\n<p>Cara dimana Django mencatat di konfigurasikan sebagai bagian dari fungsi <code class=\"docutils literal notranslate\"><span class=\"pre\">setup()</span></code> artinya bahwa panggilan mencatat ditempatkan dalam <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code> mungkin tidak bekerja seperti yang diharapkan, karena <em>logging will not be set up at that point</em>. Untuk menjelajahi mencatat, gunakan tampilan fungsi seperti disarankan dalam contoh dibawah ini.</p>\n</aside>\n<p>First, import the Python logging library, and then obtain a logger instance\nwith <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logging.getLogger\" title=\"(di Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">logging.getLogger()</span></code></a>. Provide the <code class=\"docutils literal notranslate\"><span class=\"pre\">getLogger()</span></code> method with a\nname to identify it and the records it emits. A good option is to use\n<code class=\"docutils literal notranslate\"><span class=\"pre\">__name__</span></code> (see <a class=\"reference internal\" href=\"#naming-loggers\"><span class=\"std std-ref\">Gunakan namespace pencatat</span></a> below for more on this) which will\nprovide the name of the current Python module as a dotted path:</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>Merupakan konvensi yang baik untuk melakukan deklarasi ini pada tingkat modul.</p>\n<p>Kemudian di dalam fungsi, sebagai contoh dalam tampilan, mengirimkan rekaman ke pencatat:</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>When this code is executed, a <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logging.LogRecord\" title=\"(di Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LogRecord</span></code></a> containing that\nmessage will be sent to the logger. If you're using Django's default logging\nconfiguration, the message will appear in the console.</p>\n<p>Tingkatan <code class=\"docutils literal notranslate\"><span class=\"pre\">WARNING</span></code> digunakan dalam contoh diatas adalah satu dari beberapa <a class=\"reference internal\" href=\"/id/6.0/topics/logging/#topic-logging-parts-loggers\"><span class=\"std std-ref\">logging severity levels</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>. Jadi, contoh lain mungkin:</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\">Penting</p>\n<p>Rekaman dengan tingkatan rendah daripada <code class=\"docutils literal notranslate\"><span class=\"pre\">WARNING</span></code> tidak akan muncul dalam konsol secara awalan. Merubah perilaku ini membutuhkan konfigurasi tambahan.</p>\n</aside>\n</section>\n<section id=\"customize-logging-configuration\">\n<h2>Menyesuaikan konfigurasi pencatatan<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>Meskipun konfigurasi mencatat Django bekerja di luar kotak, anda dapat mengendalikan tepatnya bagaimana catatan anda dikirim ke beragam tujuan - ke berkas catatan, layanan luar, surel dan lainnya -dengan beberapa konfigurasi tambahan.</p>\n<p>Anda dapat mengkonfigurasi</p>\n<ul class=\"simple\">\n<li><p>pencatatan pemetaan, untuk menentukan rekaman mana yang dikirim ke penangan mana</p></li>\n<li><p>penangan, untuk menentukan apa yang mereka lakukan dengan rekaman mereka terima</p></li>\n<li><p>penyaring, untuk menyediakan kendali tambahan terhadap perpindahan rekaman, dan bahkan merubah rekaman di tempat</p></li>\n<li><p>pembentuk, untuk merubah obyek <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logging.LogRecord\" title=\"(di Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LogRecord</span></code></a> menjadi string atau bentuk lain untuk dikonsumsi oleh manusia atau sistem lain</p></li>\n</ul>\n<p>Ada beragam cara dari mengkonfigurasi pencatatan. Di Django, pengaturan <a class=\"reference internal\" href=\"/id/6.0/ref/settings/#std-setting-LOGGING\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOGGING</span></code></a> adalah yang paling umum digunakan. Pengaturan menggunakan the <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.config.html#logging-config-dictschema\" title=\"(di Python v3.14)\"><span class=\"xref std std-ref\">dictConfig format</span></a>, dan memperpanjang <a class=\"reference internal\" href=\"/id/6.0/ref/logging/#default-logging-definition\"><span class=\"std std-ref\">default logging configuration</span></a>.</p>\n<p>Lihat <a class=\"reference internal\" href=\"/id/6.0/topics/logging/#configuring-logging\"><span class=\"std std-ref\">Mengkonfigurasi catatan</span></a> untuk penjelasan bagaimana pengaturan penyesuaian anda digabungkan dengan awalan Django.</p>\n<p>Lihat <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.config.html#module-logging.config\" title=\"(di 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> untuk rincian cara lain dari konfigurasi pencatatan. Demi kesederhanaan, dokumentasi ini hanya akan mempertimbangkan konfigurasi melalui pengaturan <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>Konfigurasi pencatatan dasar<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>Ketika mengkonfigurasi pencatatan, itu masuk akal untuk</p>\n<section id=\"create-a-logging-dictionary\">\n<h4>Membuat sebuah dictionary <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>LOGGING`<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>Dalam <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code> anda:</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>Itu hampir selalu masuk akal untuk mempertahankan dan memperpanjang konfigurasi pencatatan awalan dengan mengatur <code class=\"docutils literal notranslate\"><span class=\"pre\">disable_existing_loggers</span></code> menjadi <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.</p>\n</section>\n<section id=\"configure-a-handler\">\n<h4>Mengkonfigurasi penangan<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>Contoh ini mengkonfigurasikan penangan tunggal bernama <code class=\"docutils literal notranslate\"><span class=\"pre\">file</span></code>, yang menggunakan Python's <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.handlers.html#logging.FileHandler\" title=\"(di Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileHandler</span></code></a> untuk menyimpan catatan tingkatan <code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code> dan tertinggi ke berkas <code class=\"docutils literal notranslate\"><span class=\"pre\">general.log</span></code> (di akar proyek):</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>Different handler classes take different configuration options. For more\ninformation on available handler classes, see the\n<a class=\"reference internal\" href=\"/id/6.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> provided by Django and the various\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.handlers.html#module-logging.handlers\" title=\"(di Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">handler</span> <span class=\"pre\">classes</span></code></a> provided by Python.</p>\n<p>Tingkat pencatatan dapat juga di setel pada penangan (secara awalan, mereka menerima catatan pesan pada semua tingkatan). Menggunakan contoh diatas, menambahkan:</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>akan menentukan sebuah konfigurasi penangan yang hanya menerima rekaman dari tingkatan <code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code> dan lebih tinggi.</p>\n</section>\n<section id=\"configure-a-logger-mapping\">\n<h4>Mengkonfigurasi pemetaan pencatatan<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>Untuk mengirim rekaman ke penangan ini, konfigurasikan pemetaan pencatatan untuk menggunakannya sebagai contoh:</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>Nama pemetaan menentukan rekaman catatan mana yang akan diolah. Konfigurasi ini (<code class=\"docutils literal notranslate\"><span class=\"pre\">''</span></code>) adalah <em>unnamed</em>. Itu artinya bahwa dia akan mengolah rekaman dari <em>all</em> pencatat (lihat <a class=\"reference internal\" href=\"#naming-loggers\"><span class=\"std std-ref\">Gunakan namespace pencatat</span></a> dibawah pada bagaimana menggunakan nama pemetaan untuk menentukan pencatat yang akan memproses catatannya).</p>\n<p>Itu akan meneruskan pesan dari tingkatan <code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code> dan lebih tinggi ke penangan bernama <code class=\"docutils literal notranslate\"><span class=\"pre\">file</span></code>.</p>\n<p>Catat bahwa pencatat dapat meneruskan pesan ke banyan penangan, jadi hubungan diantara pencatat dan penangan adalah many-to-many.</p>\n<p>Jika anda menjalankan:</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>dalam kode anda, anda akan menemukan bahwa pesan dalam berkas <code class=\"docutils literal notranslate\"><span class=\"pre\">general.log</span></code> di akar dari proyek.</p>\n</section>\n<section id=\"configure-a-formatter\">\n<h4>Konfigurasikan pemformat<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>Secara awalan, keluaran catatan akhir mengandung pesan bagian dari tiap <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logging.LogRecord\" title=\"(di Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">log</span> <span class=\"pre\">record</span></code></a>. Gunakan pembentuk jika anda ingin menyertakan data tambahan. Nawa awal dan tentukan bentukan anda - contoh ini menentukan nama bentukan <code class=\"docutils literal notranslate\"><span class=\"pre\">verbose</span></code> dan <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>Katakunci <code class=\"docutils literal notranslate\"><span class=\"pre\">style</span></code> mengizinkan anda menentukan <code class=\"docutils literal notranslate\"><span class=\"pre\">{</span></code> for <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#str.format\" title=\"(di Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">str.format()</span></code></a> atau <code class=\"docutils literal notranslate\"><span class=\"pre\">$</span></code> untuk bentukan <a class=\"reference external\" href=\"https://docs.python.org/3/library/string.html#string.Template\" title=\"(di Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">string.Template</span></code></a> ; awalan adalah <code class=\"docutils literal notranslate\"><span class=\"pre\">$</span></code>.</p>\n<p>Lihat atribut <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logrecord-attributes\" title=\"(di Python v3.14)\"><span>LogRecord attributes</span></a> for the <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logging.LogRecord\" title=\"(di Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LogRecord</span></code></a> anda dapat sertakan.</p>\n<p>Untuk memberlakukan pembentuk untuk penangan, tambah masukan <code class=\"docutils literal notranslate\"><span class=\"pre\">formatter</span></code> pada dictionary penangan mengacu pada pembentuk berdasarkan nama, sebagai contoh:</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>Gunakan namespace pencatat<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>Konfigurasi catatan tidak bernama <code class=\"docutils literal notranslate\"><span class=\"pre\">''</span></code> menangkap catatan dari aplikasi Python apapun. Konfigurasi catatan bernama akan menangkap catatan hanya dari pencatat dengan nama yang cocok.</p>\n<p>The namespace of a logger instance is defined using\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logging.getLogger\" title=\"(di Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">getLogger()</span></code></a>. For example in <code class=\"docutils literal notranslate\"><span class=\"pre\">views.py</span></code> of <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app</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>akan membuat pencatat dalam namespace <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views`.</span> <span class=\"pre\">``__name__</span></code> mengijinkan anda mengatur pesan-pesan catatan menurut asal usulnya dalam aplikasi proyek anda otomatis. Dia juga memastikan bahwa anda tidak akan mengalami bentrokan nama.</p>\n<p>Sebuah pemetaan pencatatan bernama <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views</span></code> akan mengambil rekaman dari pencatat ini:</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>Pemetaan pencatat bernama <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app</span></code> akan menjadi tidak wajib, mengambil rekaman dari pencatat  dimanapun dalam namespace <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app</span></code> (termasuk <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>, dan sebagainya):</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>Anda dapat juga menentukan namespace pencatat secara eksplisit:</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>dan atur pemetaan pencatatan yang sesuai.</p>\n<section id=\"using-logger-hierarchies-and-propagation\">\n<span id=\"naming-loggers-hierarchy\"></span><h5>Menggunakan hierarki dan propagasi pencatatan<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>Penamanan pencatat adalah <em>hierarchical</em>. <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app</span></code> adalah induk dari <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views</span></code>, yang merupakan induk dari <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views.private</span></code>. Meskipuin ditentukan sebaliknya, pemetaan pencatat akan menyebarkan rekaman proses mereka ke induk mereka - rekaman dari pencatat di namespace <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views.private</span></code> akan ditangani dengan memetakan kedua <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views</span></code>.</p>\n<p>Untuk mengelola perilaku ini, setel kunci propagasi pada pemetaan anda tentukan:</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> awalan adalah <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>. Di contoh ini, catatan dari <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views.private</span></code> tidak akan ditangani oleh orang tua, tetapi catatan <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views</span></code> akan.</p>\n</section>\n</section>\n</section>\n<section id=\"configure-responsive-logging\">\n<h3>Mengkonfigurasikan pencatatan responsif<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>Mencatat adalah paling berguna ketika mengandung informasi sebanyak mungkin, tetapi bukan informasi uang anda tidak butuhkan - dan sebepara banyak anda butuhkan tergantung terhadap apa yang anda lakukan. Ketika anda sedang mencari kesalahan, anda butuh tingkatan informasi yang akan berlebihan dan tidak membantu jika anda harus berurusan dengannya di produksi.</p>\n<p>Anda dapat menkonfigurasi catatan untuk menyediakan anda dengan tingkatan dari rincian yang anda butuhkan, ketika anda membutuhkannya. Daripada secara manuak merubah konfigurasi  untuk mencapai ini, cara terbaik adalah memberlakukan konfigurasi otomatis menurut lingkungan.</p>\n<p>Sebagai contoh, anda dapat mensetel variabel lingkungan <code class=\"docutils literal notranslate\"><span class=\"pre\">DJANGO_LOG_LEVEL</span></code> dengan tepat di lingkungan pengembangan dan pementasan, dan memanfaatkannya di pemetaan pencatatan:</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>- sehingga kecuali lingkungan menentukan tingkat catatan yang lebih rendah, konfigurasi ini hanya akan meneruskan rekaman dari kerasnya``WARNING`` dan diatasnya untuk penangannya.</p>\n<p>Pilihan lain dalam konfigurasi (seperti pilihan <code class=\"docutils literal notranslate\"><span class=\"pre\">level</span></code> atau <code class=\"docutils literal notranslate\"><span class=\"pre\">formatter</span></code> dari penangan) dapat dikelola dengan cara yang sama.</p>\n</section>\n</section>","rootId":"how-to-configure-and-use-logging","toc":[{"title":"Membuat panggilan pencatatan dasar","anchor":"make-a-basic-logging-call","children":[]},{"title":"Menyesuaikan konfigurasi pencatatan","anchor":"customize-logging-configuration","children":[{"title":"Konfigurasi pencatatan dasar","anchor":"basic-logging-configuration","children":[{"title":"Membuat sebuah dictionary ``LOGGING`","anchor":"create-a-logging-dictionary","children":[]},{"title":"Mengkonfigurasi penangan","anchor":"configure-a-handler","children":[]},{"title":"Mengkonfigurasi pemetaan pencatatan","anchor":"configure-a-logger-mapping","children":[]},{"title":"Konfigurasikan pemformat","anchor":"configure-a-formatter","children":[]},{"title":"Gunakan namespace pencatat","anchor":"use-logger-namespacing","children":[{"title":"Menggunakan hierarki dan propagasi pencatatan","anchor":"using-logger-hierarchies-and-propagation","children":[]}]}]},{"title":"Mengkonfigurasikan pencatatan responsif","anchor":"configure-responsive-logging","children":[]}]}],"breadcrumbs":[{"docname":"howto/index","title":"Panduan Cara-cara","url":"/id/6.0/howto/"}],"prev":{"docname":"howto/static-files/index","title":"Bagaimana mengelola berkas statik (misalnya gambar, JavaScript, CSS)","url":"/id/6.0/howto/static-files/"},"next":{"docname":"howto/error-reporting","title":"Bagaimana mengelola pelaporan kesalahan","url":"/id/6.0/howto/error-reporting/"},"formats":{"html":"/id/6.0/howto/logging/","markdown":"/id/6.0/howto/logging.md","json":"/id/6.0/howto/logging.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/howto/logging.txt","official":"https://docs.djangoproject.com/id/6.0/howto/logging/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}