{"title":"Bagaimana mengkonfigurasi dan menggunakan pencatatan","version":"5.2","locale":"id","docname":"howto/logging","url":"/id/5.2/howto/logging/","canonical":"https://djangodocs.dev/id/5.2/howto/logging/","summary":"Django menyediakan kerja default logging configuration yang mudah diperpanjang. Untuk mengirim pesan catatan dari dalam kode anda, anda dapat menempatkan…","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\" role=\"note\">\n<p class=\"admonition-title\">Lihat juga</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/id/5.2/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/5.2/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/5.2/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\" role=\"note\">\n<p class=\"admonition-title\">Jangan tergoda untuk menggunakan panggilan pencatatan dalam <code class=\"docutils literal notranslate\">settings.py</code>.</p>\n<p>Cara dimana Django mencatat di konfigurasikan sebagai bagian dari fungsi <code class=\"docutils literal notranslate\">setup()</code> artinya bahwa panggilan mencatat ditempatkan dalam <code class=\"docutils literal notranslate\">settings.py</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>Pertama, impor pustaka mencatat Python, dan kemudian ambil instance pencatat dengan <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\">logging.getLogger()</code></a>. Sediakan metode <code class=\"docutils literal notranslate\">getLogger()</code> dengan nama untuk mencirikan itu dan catatan yang dipancarkannya. Pilihan baik adalah menggunakan <code class=\"docutils literal notranslate\">__name__</code> (lihat <a class=\"reference internal\" href=\"#naming-loggers\"><span class=\"std std-ref\">Gunakan namespace pencatat</span></a> di bawah untuk informasi lebih lanjut tentang ini) yang akan menyediakan nama dari modul Python saat ini sebagai jalur bertitik:</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=\"nn\">logging</span>\n\nlogger <span class=\"o\">=</span> logging<span class=\"o\">.</span>getLogger<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=\"nf\">some_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n    <span class=\"k\">if</span> some_risky_state<span class=\"p\">:</span>\n        logger<span class=\"o\">.</span>warning<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>Ketika kode ini dijalankan, <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\">LogRecord</code></a> mengandung pesan itu akan terkirim ke pencatat. Jika anda menggunakan konfigurasi pencatatan awalan Django, pesan akan muncul di konsol.</p>\n<p>Tingkatan <code class=\"docutils literal notranslate\">WARNING</code> digunakan dalam contoh diatas adalah satu dari beberapa <a class=\"reference internal\" href=\"/id/5.2/topics/logging/#topic-logging-parts-loggers\"><span class=\"std std-ref\">logging severity levels</span></a>: <code class=\"docutils literal notranslate\">DEBUG</code>, <code class=\"docutils literal notranslate\">INFO</code>, <code class=\"docutils literal notranslate\">WARNING</code>, <code class=\"docutils literal notranslate\">ERROR</code>, <code class=\"docutils literal notranslate\">CRITICAL</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>logger<span class=\"o\">.</span>critical<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\" role=\"note\">\n<p class=\"admonition-title\">Penting</p>\n<p>Rekaman dengan tingkatan rendah daripada <code class=\"docutils literal notranslate\">WARNING</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\">LogRecord</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/5.2/ref/settings/#std-setting-LOGGING\"><code class=\"xref std std-setting docutils literal notranslate\">LOGGING</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/5.2/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/5.2/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\">Python logging documentation</code></a> untuk rincian cara lain dari konfigurasi pencatatan. Demi kesederhanaan, dokumentasi ini hanya akan mempertimbangkan konfigurasi melalui pengaturan <code class=\"docutils literal notranslate\">LOGGING</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\">settings.py</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>LOGGING <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\">disable_existing_loggers</code> menjadi <code class=\"docutils literal notranslate\">False</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\">file</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\">FileHandler</code></a> untuk menyimpan catatan tingkatan <code class=\"docutils literal notranslate\">DEBUG</code> dan tertinggi ke berkas <code class=\"docutils literal notranslate\">general.log</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>LOGGING <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>Kelas-kelas penangan berbeda mengambil pilihan konfigurasi berbeda. Untuk informasi lebih pada ketersediaan kelas-kelas penangan, lihat <a class=\"reference internal\" href=\"/id/5.2/ref/logging/#django.utils.log.AdminEmailHandler\" title=\"django.utils.log.AdminEmailHandler\"><code class=\"xref py py-class docutils literal notranslate\">AdminEmailHandler</code></a> disediakan oleh Django dan beragam <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\">handler classes</code></a> disediakan oleh 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\">DEBUG</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>LOGGING <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\">''</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\">DEBUG</code> dan lebih tinggi ke penangan bernama <code class=\"docutils literal notranslate\">file</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>logger<span class=\"o\">.</span>debug<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\">general.log</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\">log record</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\">verbose</code> dan <code class=\"docutils literal notranslate\">simple</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>LOGGING <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\">style</code> mengizinkan anda menentukan <code class=\"docutils literal notranslate\">{</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\">str.format()</code></a> atau <code class=\"docutils literal notranslate\">$</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\">string.Template</code></a> ; awalan adalah <code class=\"docutils literal notranslate\">$</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\">LogRecord</code></a> anda dapat sertakan.</p>\n<p>Untuk memberlakukan pembentuk untuk penangan, tambah masukan <code class=\"docutils literal notranslate\">formatter</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\">''</code> menangkap catatan dari aplikasi Python apapun. Konfigurasi catatan bernama akan menangkap catatan hanya dari pencatat dengan nama yang cocok.</p>\n<p>Namespace dari instance pencatat ditentukan menggunakan <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\">getLogger()</code></a>. Sebagai contoh dalam <code class=\"docutils literal notranslate\">views.py</code> dari <code class=\"docutils literal notranslate\">my_app</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>logger <span class=\"o\">=</span> logging<span class=\"o\">.</span>getLogger<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\">my_app.views`. ``__name__</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\">my_app.views</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>LOGGING <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\">my_app</code> akan menjadi tidak wajib, mengambil rekaman dari pencatat  dimanapun dalam namespace <code class=\"docutils literal notranslate\">my_app</code> (termasuk <code class=\"docutils literal notranslate\">my_app.views</code>, <code class=\"docutils literal notranslate\">my_app.utils</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>LOGGING <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>logger <span class=\"o\">=</span> logging<span class=\"o\">.</span>getLogger<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\">my_app</code> adalah induk dari <code class=\"docutils literal notranslate\">my_app.views</code>, yang merupakan induk dari <code class=\"docutils literal notranslate\">my_app.views.private</code>. Meskipuin ditentukan sebaliknya, pemetaan pencatat akan menyebarkan rekaman proses mereka ke induk mereka - rekaman dari pencatat di namespace <code class=\"docutils literal notranslate\">my_app.views.private</code> akan ditangani dengan memetakan kedua <code class=\"docutils literal notranslate\">my_app</code> dan <code class=\"docutils literal notranslate\">my_app.views</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>LOGGING <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\">propagate</code> awalan adalah <code class=\"docutils literal notranslate\">True</code>. Di contoh ini, catatan dari <code class=\"docutils literal notranslate\">my_app.views.private</code> tidak akan ditangani oleh orang tua, tetapi catatan <code class=\"docutils literal notranslate\">my_app.views</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\">DJANGO_LOG_LEVEL</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> os<span class=\"o\">.</span>getenv<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\">level</code> atau <code class=\"docutils literal notranslate\">formatter</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/5.2/howto/"}],"prev":{"docname":"howto/static-files/index","title":"Bagaimana mengelola berkas statik (misalnya gambar, JavaScript, CSS)","url":"/id/5.2/howto/static-files/"},"next":{"docname":"howto/error-reporting","title":"Bagaimana mengelola pelaporan kesalahan","url":"/id/5.2/howto/error-reporting/"},"formats":{"html":"/id/5.2/howto/logging/","markdown":"/id/5.2/howto/logging.md","json":"/id/5.2/howto/logging.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/howto/logging.txt","official":"https://docs.djangoproject.com/id/5.2/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"]}