{"title":"Så här konfigurerar och använder du loggning","version":"5.2","locale":"sv","docname":"howto/logging","url":"/sv/5.2/howto/logging/","canonical":"https://djangodocs.dev/sv/5.2/howto/logging/","summary":"Se även Djangos loggningsreferens Django loggningsöversikt Django tillhandahåller en fungerande standardkonfiguration för loggning som lätt kan utökas. Ringa ett…","html":"<span id=\"logging-how-to\"></span><h1>Så här konfigurerar och använder du loggning<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\">Se även</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/sv/5.2/ref/logging/#logging-ref\"><span class=\"std std-ref\">Djangos loggningsreferens</span></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/5.2/topics/logging/#logging-explanation\"><span class=\"std std-ref\">Django loggningsöversikt</span></a></p></li>\n</ul>\n</aside>\n<p>Django tillhandahåller en fungerande <a class=\"reference internal\" href=\"/sv/5.2/ref/logging/#default-logging-configuration\"><span class=\"std std-ref\">standardkonfiguration för loggning</span></a> som lätt kan utökas.</p>\n<section id=\"make-a-basic-logging-call\">\n<h2>Ringa ett grundläggande loggningssamtal<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>Om du vill skicka ett loggmeddelande från din kod placerar du ett loggningsanrop i den.</p>\n<aside class=\"admonition-don-t-be-tempted-to-use-logging-calls-in-settings-py admonition\">\n<p class=\"admonition-title\">Låt dig inte frestas att använda loggningsanrop i <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code>.</p>\n<p>Det sätt på vilket Django-loggning konfigureras som en del av funktionen <code class=\"docutils literal notranslate\"><span class=\"pre\">setup()</span></code> innebär att loggningsanrop som placeras i <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code> kanske inte fungerar som förväntat, eftersom <em>loggning inte kommer att konfigureras vid den tidpunkten</em>. Om du vill utforska loggning kan du använda en view-funktion enligt exemplet nedan.</p>\n</aside>\n<p>Importera först Pythons loggningsbibliotek och hämta sedan en logger-instans med <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logging.getLogger\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">logging.getLogger()</span></code></a>. Förse metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">getLogger()</span></code> med ett namn för att identifiera den och de poster den skickar ut. Ett bra alternativ är att använda <code class=\"docutils literal notranslate\"><span class=\"pre\">__name__</span></code> (se <a class=\"reference internal\" href=\"#naming-loggers\"><span class=\"std std-ref\">Använd namnavstånd för logger</span></a> nedan för mer om detta) som kommer att ge namnet på den aktuella Python-modulen som en prickad sökväg:</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>Det är en bra konvention att utföra denna deklaration på modulnivå.</p>\n<p>Och sedan i en funktion, till exempel i en vy, skicka en post till loggaren:</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>När den här koden körs kommer en <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logging.LogRecord\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LogRecord</span></code></a> som innehåller meddelandet att skickas till loggern. Om du använder Djangos standardkonfiguration för loggning kommer meddelandet att visas i konsolen.</p>\n<p>Nivån <code class=\"docutils literal notranslate\"><span class=\"pre\">WARNING</span></code> som används i exemplet ovan är en av flera <a class=\"reference internal\" href=\"/sv/5.2/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>. Så ett annat exempel kan vara:</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\">Viktigt</p>\n<p>Poster med en nivå lägre än <code class=\"docutils literal notranslate\"><span class=\"pre\">VARNING</span></code> visas inte i konsolen som standard. För att ändra detta beteende krävs ytterligare konfiguration.</p>\n</aside>\n</section>\n<section id=\"customize-logging-configuration\">\n<h2>Anpassa konfigurationen för loggning<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>Även om Djangos loggningskonfiguration fungerar direkt, kan du styra exakt hur dina loggar skickas till olika destinationer - till loggfiler, externa tjänster, e-post och så vidare - med lite ytterligare konfiguration.</p>\n<p>Du kan konfigurera:</p>\n<ul class=\"simple\">\n<li><p>loggermappningar för att bestämma vilka poster som ska skickas till vilka hanterare</p></li>\n<li><p>handläggare, för att avgöra vad de gör med de handlingar de får</p></li>\n<li><p>filter, för att ge ytterligare kontroll över överföringen av handlingar och till och med ändra handlingar på plats</p></li>\n<li><p>formatters, för att konvertera <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logging.LogRecord\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LogRecord</span></code></a>-objekt till en sträng eller annan form som kan användas av människor eller andra system</p></li>\n</ul>\n<p>Det finns olika sätt att konfigurera loggning. I Django används oftast inställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-LOGGING\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOGGING</span></code></a>. Inställningen använder <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.config.html#logging-config-dictschema\" title=\"(in Python v3.14)\"><span class=\"xref std std-ref\">dictConfig-formatet</span></a>, och utökar <a class=\"reference internal\" href=\"/sv/5.2/ref/logging/#default-logging-definition\"><span class=\"std std-ref\">default logging configuration</span></a>.</p>\n<p>Se <a class=\"reference internal\" href=\"/sv/5.2/topics/logging/#configuring-logging\"><span class=\"std std-ref\">Konfigurera loggning</span></a> för en förklaring av hur dina anpassade inställningar slås samman med Djangos standardinställningar.</p>\n<p>Se <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.config.html#module-logging.config\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">Python</span> <span class=\"pre\">logging</span> <span class=\"pre\">documentation</span></code></a> för detaljer om andra sätt att konfigurera loggning. För enkelhetens skull kommer den här dokumentationen endast att behandla konfiguration via inställningen <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>Grundläggande konfiguration av loggning<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>När du konfigurerar loggning är det klokt att</p>\n<section id=\"create-a-logging-dictionary\">\n<h4>Skapa en <code class=\"docutils literal notranslate\"><span class=\"pre\">LOGGING</span></code>-ordbok<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>I din <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">LOGGING</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;version&quot;</span><span class=\"p\">:</span> <span class=\"mi\">1</span><span class=\"p\">,</span>  <span class=\"c1\"># the dictConfig format version</span>\n    <span class=\"s2\">&quot;disable_existing_loggers&quot;</span><span class=\"p\">:</span> <span class=\"kc\">False</span><span class=\"p\">,</span>  <span class=\"c1\"># retain the default loggers</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>Det är nästan alltid vettigt att behålla och utöka standardkonfigurationen för loggning genom att sätta <code class=\"docutils literal notranslate\"><span class=\"pre\">disable_existing_loggers</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.</p>\n</section>\n<section id=\"configure-a-handler\">\n<h4>Konfigurera en hanterare<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>I det här exemplet konfigureras en enda hanterare med namnet <code class=\"docutils literal notranslate\"><span class=\"pre\">file</span></code> som använder Pythons <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.handlers.html#logging.FileHandler\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileHandler</span></code></a> för att spara loggar på nivån <code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code> och högre i filen <code class=\"docutils literal notranslate\"><span class=\"pre\">general.log</span></code> (i projektets rot):</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>Olika hanterarklasser kräver olika konfigurationsalternativ. Mer information om tillgängliga hanterarklasser finns i <a class=\"reference internal\" href=\"/sv/5.2/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> som tillhandahålls av Django och de olika <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.handlers.html#module-logging.handlers\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">handler</span> <span class=\"pre\">classes</span></code></a> som tillhandahålls av Python.</p>\n<p>Loggningsnivåer kan också ställas in för hanterarna (som standard accepterar de loggmeddelanden på alla nivåer). Med hjälp av exemplet ovan kan du lägga till:</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>skulle definiera en hanterarkonfiguration som endast accepterar poster på nivå <code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code> och högre.</p>\n</section>\n<section id=\"configure-a-logger-mapping\">\n<h4>Konfigurera en loggermappning<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>Om du vill skicka poster till den här hanteraren konfigurerar du en loggermappning för att använda den, t.ex:</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>Mappningens namn avgör vilka loggposter den kommer att bearbeta. Den här konfigurationen (<code class=\"docutils literal notranslate\"><span class=\"pre\">''</span></code>) är <em>onamngiven</em>. Det innebär att den kommer att bearbeta poster från <em>alla</em> loggar (se <a class=\"reference internal\" href=\"#naming-loggers\"><span class=\"std std-ref\">Använd namnavstånd för logger</span></a> nedan om hur du använder mappningsnamnet för att avgöra vilka loggar som den kommer att bearbeta poster för).</p>\n<p>Den kommer att vidarebefordra meddelanden av nivå <code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code> och högre till hanteraren med namnet <code class=\"docutils literal notranslate\"><span class=\"pre\">file</span></code>.</p>\n<p>Observera att en logger kan vidarebefordra meddelanden till flera handläggare, så relationen mellan loggar och handläggare är många-till-många.</p>\n<p>Om du avrättar:</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>i din kod, kommer du att hitta meddelandet i filen <code class=\"docutils literal notranslate\"><span class=\"pre\">general.log</span></code> i roten av projektet.</p>\n</section>\n<section id=\"configure-a-formatter\">\n<h4>Konfigurera en formaterare<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>Som standard innehåller den slutliga loggutmatningen meddelandedelen av varje <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logging.LogRecord\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">log</span> <span class=\"pre\">record</span></code></a>. Använd en formatterare om du vill inkludera ytterligare data. Namnge och definiera först dina formatterare - i det här exemplet definieras formatterare med namnen <code class=\"docutils literal notranslate\"><span class=\"pre\">verbose</span></code> och <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>Med nyckelordet <code class=\"docutils literal notranslate\"><span class=\"pre\">style</span></code> kan du ange <code class=\"docutils literal notranslate\"><span class=\"pre\">{</span></code> för <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#str.format\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">str.format()</span></code></a> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">$</span></code> för <a class=\"reference external\" href=\"https://docs.python.org/3/library/string.html#string.Template\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">string.Template</span></code></a>-formatering; standard är <code class=\"docutils literal notranslate\"><span class=\"pre\">$</span></code>.</p>\n<p>Se <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logrecord-attributes\" title=\"(in Python v3.14)\"><span>LogRecord attributes</span></a> för de <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logging.LogRecord\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LogRecord</span></code></a>-attribut som du kan inkludera.</p>\n<p>Om du vill använda en formaterare i en hanterare lägger du till en <code class=\"docutils literal notranslate\"><span class=\"pre\">formatter</span></code>-post i hanterarens dictionary som hänvisar till formateraren med namn, t.ex:</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>Använd namnavstånd för logger<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>Den namnlösa loggningskonfigurationen <code class=\"docutils literal notranslate\"><span class=\"pre\">''</span></code> fångar upp loggar från alla Python-program. En namngiven loggningskonfiguration fångar endast loggar från loggar med matchande namn.</p>\n<p>Namnrymden för en loggerinstans definieras med <a class=\"reference external\" href=\"https://docs.python.org/3/library/logging.html#logging.getLogger\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">getLogger()</span></code></a>. Till exempel i <code class=\"docutils literal notranslate\"><span class=\"pre\">views.py</span></code> i <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>kommer att skapa en logger i namnrymden <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views</span></code>. med <code class=\"docutils literal notranslate\"><span class=\"pre\">__name__</span></code> kan du automatiskt organisera loggmeddelanden enligt deras ursprung inom projektets applikationer. Det säkerställer också att du inte kommer att uppleva namnkollisioner.</p>\n<p>En loggermappning med namnet <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views</span></code> kommer att samla in poster från denna logger:</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>En loggermappning med namnet <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app</span></code> är mer tillåtande och fångar upp poster från loggar var som helst inom namnrymden <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app</span></code> (inklusive <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> och så vidare):</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>Du kan också definiera loggarnas namnavstånd explicit:</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>och ställa in loggermappningar i enlighet med detta.</p>\n<section id=\"using-logger-hierarchies-and-propagation\">\n<span id=\"naming-loggers-hierarchy\"></span><h5>Användning av loggerhierarkier och spridning<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>Loggarnas namngivning är <em>hierarkisk</em>. <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app</span></code> är överordnad <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views</span></code>, som är överordnad <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views.private</span></code>. Om inget annat anges kommer loggermappningar att sprida de poster de bearbetar till sina föräldrar - en post från en logger i namnrymden <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views.private</span></code> kommer att hanteras av en mappning för både <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views</span></code>.</p>\n<p>Om du vill hantera detta beteende anger du propageringsknappen för de mappningar du definierar:</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> har som standard värdet <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>. I det här exemplet kommer loggarna från <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views.private</span></code> inte att hanteras av föräldern, men det kommer loggarna från <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app.views</span></code> att göra.</p>\n</section>\n</section>\n</section>\n<section id=\"configure-responsive-logging\">\n<h3>Konfigurera responsiv loggning<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>Loggning är som mest användbar när den innehåller så mycket information som möjligt, men inte information som du inte behöver - och hur mycket du behöver beror på vad du gör. När du felsöker behöver du en informationsnivå som skulle vara överdriven och ohjälpsam om du var tvungen att hantera den i produktionen.</p>\n<p>Du kan konfigurera loggningen så att den ger dig den detaljnivå du behöver, när du behöver den. I stället för att manuellt ändra konfigurationen för att uppnå detta, är det bättre att tillämpa konfigurationen automatiskt beroende på miljön.</p>\n<p>Du kan till exempel ställa in miljövariabeln <code class=\"docutils literal notranslate\"><span class=\"pre\">DJANGO_LOG_LEVEL</span></code> på rätt sätt i dina utvecklings- och stagingmiljöer och använda den i en loggermappning på följande sätt:</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>- så att om inte miljön anger en lägre loggnivå, kommer denna konfiguration endast att vidarebefordra poster med allvarlighetsgrad <code class=\"docutils literal notranslate\"><span class=\"pre\">WARNING</span></code> och högre till sin hanterare.</p>\n<p>Andra alternativ i konfigurationen (t.ex. alternativet <code class=\"docutils literal notranslate\"><span class=\"pre\">level</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">formatter</span></code> för handläggare) kan hanteras på liknande sätt.</p>\n</section>\n</section>","rootId":"how-to-configure-and-use-logging","toc":[{"title":"Ringa ett grundläggande loggningssamtal","anchor":"make-a-basic-logging-call","children":[]},{"title":"Anpassa konfigurationen för loggning","anchor":"customize-logging-configuration","children":[{"title":"Grundläggande konfiguration av loggning","anchor":"basic-logging-configuration","children":[{"title":"Skapa en LOGGING-ordbok","anchor":"create-a-logging-dictionary","children":[]},{"title":"Konfigurera en hanterare","anchor":"configure-a-handler","children":[]},{"title":"Konfigurera en loggermappning","anchor":"configure-a-logger-mapping","children":[]},{"title":"Konfigurera en formaterare","anchor":"configure-a-formatter","children":[]},{"title":"Använd namnavstånd för logger","anchor":"use-logger-namespacing","children":[{"title":"Användning av loggerhierarkier och spridning","anchor":"using-logger-hierarchies-and-propagation","children":[]}]}]},{"title":"Konfigurera responsiv loggning","anchor":"configure-responsive-logging","children":[]}]}],"breadcrumbs":[{"docname":"howto/index","title":"Hur man gör-guider","url":"/sv/5.2/howto/"}],"prev":{"docname":"howto/static-files/index","title":"Hur man hanterar statiska filer (t.ex. bilder, JavaScript, CSS)","url":"/sv/5.2/howto/static-files/"},"next":{"docname":"howto/error-reporting","title":"Hur man hanterar felrapportering","url":"/sv/5.2/howto/error-reporting/"},"formats":{"html":"/sv/5.2/howto/logging/","markdown":"/sv/5.2/howto/logging.md","json":"/sv/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/sv/5.2/howto/logging/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}