{"title":"Bagaimana mengkonfigurasi dan menggunakan pencatatan","version":"4.2","locale":"id","docname":"howto/logging","url":"/id/4.2/howto/logging/","canonical":"https://djangodocs.dev/id/4.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/4.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/4.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/4.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>The way that Django logging is configured as part of the <code class=\"docutils literal notranslate\">setup()</code>\nfunction means that logging calls placed in <code class=\"docutils literal notranslate\">settings.py</code> may not work as\nexpected, because <em>logging will not be set up at that point</em>. To explore\nlogging, use a view function as suggested in the example below.</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\">logging.getLogger()</code></a>. Provide the <code class=\"docutils literal notranslate\">getLogger()</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\">__name__</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=\"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/4.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>Although Django's logging configuration works out of the box, you can control\nexactly how your logs are sent to various destinations - to log files, external\nservices, email and so on - with some additional configuration.</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/4.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/4.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/4.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/4.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>The mapping's name determines which log records it will process. This\nconfiguration (<code class=\"docutils literal notranslate\">''</code>) is <em>unnamed</em>. That means that it will process records\nfrom <em>all</em> loggers (see <a class=\"reference internal\" href=\"#naming-loggers\"><span class=\"std std-ref\">Gunakan namespace pencatat</span></a> below on how to use the mapping\nname to determine the loggers for which it will process records).</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>The unnamed logging configuration <code class=\"docutils literal notranslate\">''</code> captures logs from any Python\napplication. A named logging configuration will capture logs only from loggers\nwith matching names.</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>will create a logger in the <code class=\"docutils literal notranslate\">my_app.views</code> namespace. <code class=\"docutils literal notranslate\">__name__</code> allows you\nto organize log messages according to their provenance within your project's\napplications automatically. It also ensures that you will not experience name\ncollisions.</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>A logger mapping named <code class=\"docutils literal notranslate\">my_app</code> will be more permissive, capturing records\nfrom loggers anywhere within the <code class=\"docutils literal notranslate\">my_app</code> namespace (including\n<code class=\"docutils literal notranslate\">my_app.views</code>, <code class=\"docutils literal notranslate\">my_app.utils</code>, and so on):</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>Logger naming is <em>hierarchical</em>. <code class=\"docutils literal notranslate\">my_app</code> is the parent of <code class=\"docutils literal notranslate\">my_app.views</code>,\nwhich is the parent of <code class=\"docutils literal notranslate\">my_app.views.private</code>. Unless specified otherwise,\nlogger mappings will propagate the records they process to their parents - a\nrecord from a logger in the <code class=\"docutils literal notranslate\">my_app.views.private</code> namespace will be handled\nby a mapping for both <code class=\"docutils literal notranslate\">my_app</code> and <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>Logging is most useful when it contains as much information as possible, but\nnot information that you don't need - and how much you need depends upon what\nyou're doing. When you're debugging, you need a level of information that would\nbe excessive and unhelpful if you had to deal with it in production.</p>\n<p>You can configure logging to provide you with the level of detail you need,\nwhen you need it. Rather than manually change configuration to achieve this, a\nbetter way is to apply configuration automatically according to the\nenvironment.</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 \"Bagaimana\"","url":"/id/4.2/howto/"}],"prev":{"docname":"howto/legacy-databases","title":"Bagaimana menggabungkan Django dengan basisdata warisan","url":"/id/4.2/howto/legacy-databases/"},"next":{"docname":"howto/outputting-csv","title":"Bagaimana membuat keluaran CSV","url":"/id/4.2/howto/outputting-csv/"},"formats":{"html":"/id/4.2/howto/logging/","markdown":"/id/4.2/howto/logging.md","json":"/id/4.2/howto/logging.json"},"source":"https://github.com/django/django/blob/stable/4.2.x/docs/howto/logging.txt","official":"https://docs.djangoproject.com/id/4.2/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"]}