{"id":46049,"date":"2025-04-08T04:59:13","date_gmt":"2025-04-08T04:59:13","guid":{"rendered":"https:\/\/www.carmatec.com\/?p=46049"},"modified":"2025-12-31T09:05:52","modified_gmt":"2025-12-31T09:05:52","slug":"python-logging-best-practices-vollstandige-anleitung","status":"publish","type":"post","link":"https:\/\/www.carmatec.com\/de\/blog\/python-logging-best-practices-vollstandige-anleitung\/","title":{"rendered":"Python Logging Best Practices: Vollst\u00e4ndiger Leitfaden 2026"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"46049\" class=\"elementor elementor-46049\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-94ade6b e-flex e-con-boxed e-con e-parent\" data-id=\"94ade6b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5163a71 elementor-widget elementor-widget-text-editor\" data-id=\"5163a71\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Die Protokollierung ist ein wesentlicher Bestandteil der Softwareentwicklung, der oft \u00fcbersehen wird, bis etwas schief geht. In Python bietet das eingebaute Logging-Modul einen leistungsstarken und flexiblen Rahmen f\u00fcr die Verfolgung von Ereignissen, die Fehlersuche und die \u00dcberwachung des Anwendungsverhaltens. Um es effektiv zu nutzen, muss man jedoch mehr tun, als nur print()-Anweisungen oder einfache Log-Aufrufe in den Code zu streuen. Dieser ultimative Leitfaden taucht in die Best Practices der Python-Protokollierung ein und bietet umsetzbare Tipps, Beispiele und Strategien, die Ihnen helfen, eine robuste Protokollierung in Ihren Projekten zu implementieren.<\/p><p>Egal, ob Sie ein Anf\u00e4nger sind, der print() durch ein richtiges Logging ersetzen m\u00f6chte, oder ein erfahrener Entwickler, der die Beobachtbarkeit seiner Anwendung optimieren m\u00f6chte, dieser Leitfaden hilft Ihnen dabei. Lassen Sie uns herausfinden, wie Sie das volle Potenzial von Pythons Logging-Modul aussch\u00f6pfen k\u00f6nnen.<\/p><p>Warum ist Logging wichtig?<\/p><p>Bevor wir uns mit bew\u00e4hrten Verfahren befassen, sollten wir kl\u00e4ren, warum die Protokollierung Ihre Zeit wert ist. Im Gegensatz zu print()-Anweisungen, die tempor\u00e4r sind und keinen Kontext haben, bietet die Protokollierung eine strukturierte M\u00f6glichkeit, die Vorg\u00e4nge in Ihrer Anwendung aufzuzeichnen. Es hilft Ihnen:<\/p><ul><li><strong>Debug-Probleme:<\/strong> Ermitteln Sie, wo und warum etwas fehlgeschlagen ist.<\/li><li><strong>Leistung \u00fcberwachen:<\/strong> Verfolgen Sie Ausf\u00fchrungszeiten und Ressourcennutzung.<\/li><li><strong>Audit-Aktionen:<\/strong> Aufzeichnung von Benutzeraktivit\u00e4ten oder Systemereignissen.<\/li><li><strong>Verstehen Sie das Verhalten:<\/strong> Gewinnen Sie Einblicke in den Produktionsbetrieb Ihrer Anwendung.<\/li><\/ul><p>Schlechte Protokollierungspraktiken - wie \u00fcberm\u00e4\u00dfige Ausf\u00fchrlichkeit, fehlender Kontext oder inkonsistente Formatierung - k\u00f6nnen Protokolle nutzlos oder sogar sch\u00e4dlich machen, da sie Sie mit Rauschen \u00fcberfluten. Richtig gemacht, wird die Protokollierung zu einer Superkraft f\u00fcr die Wartung und Skalierung Ihrer Anwendungen.<\/p><h5><strong>1. Verwenden Sie die <code>Protokollierung<\/code> Modul, nicht <code>drucken()<\/code><\/strong><\/h5><p>Der erste Schritt zur effektiven Protokollierung ist der Verzicht auf <code>drucken()<\/code> f\u00fcr die <code>Protokollierung<\/code> Modul. W\u00e4hrend <code>drucken()<\/code> f\u00fcr schnelle Skripte gut geeignet ist, fehlen ihm die Funktionen, die Sie f\u00fcr reale Anwendungen ben\u00f6tigen:<\/p><ul><li><strong>Levels:<\/strong> Die Protokollierung unterst\u00fctzt Schweregrade (DEBUG, INFO, WARNING, ERROR, CRITICAL) zum Filtern von Meldungen.<\/li><li><strong>Formatierung:<\/strong> Die Protokolle k\u00f6nnen Zeitstempel, Modulnamen und mehr enthalten.<\/li><li><strong>Reiseziele:<\/strong> Senden Sie Protokolle an Dateien, Konsolen oder entfernte Systeme.<\/li><\/ul><p><strong>Beispiel: Grundlegende Einrichtung der Protokollierung<\/strong><\/p><pre>python\nimportieren Logging\n\n# Grundkonfiguration\nlogging.basicConfig(level=logging.INFO)\nlogger = logging.getLogger(__name__)\n\nlogger.info(\"Dies ist eine Info-Meldung\")\nlogger.warning(\"Dies ist eine Warnmeldung\")<\/pre><p><strong>Ausgabe:<\/strong><br \/>INFO:__main__:Dies ist eine Info-Meldung<br \/>WARNING:__main__:Dies ist eine Warnmeldung<\/p><p><strong>Bew\u00e4hrte Praxis:<\/strong> Verwenden Sie immer logging.getLogger(__name__), um eine Logger-Instanz zu erstellen. Die Variable __name__ stellt sicher, dass der Logger nach dem Modul benannt wird, in dem er sich befindet, was die Verfolgung von Logmeldungen in gr\u00f6\u00dferen Projekten erleichtert.<\/p><h5><strong>2. Protokollierung fr\u00fchzeitig konfigurieren<\/strong><\/h5><p>Richten Sie Ihre Protokollierungskonfiguration beim Start Ihrer Anwendung ein. Dadurch wird sichergestellt, dass alle Module dieselben Einstellungen verwenden und ein unerwartetes Verhalten der Standardkonfiguration vermieden wird.<\/p><p><strong>Beispiel: Benutzerdefinierte Konfiguration<\/strong><\/p><pre>python\nimportieren Logging\n\nlogging.basicConfig(\n    level=logging.DEBUG,\n    format=\"%(asctime)s - %(name)s - %(levelname)s - %(message)s\",\n    filename=\"app.log\",\n    filemode=\"w\"\n)\n\nlogger = logging.getLogger(__name__)\nlogger.debug(\"Fehlersuche gestartet\")<\/pre><p><strong>Ausgabe in<\/strong> <code>app.log<\/code>:<br \/>2026-04-08 10:00:00,123 - __main__ - DEBUG - Fehlersuche gestartet<\/p><p><strong>Bew\u00e4hrte Praxis:<\/strong> Verwenden Sie <code>basicConfig()<\/code> f\u00fcr einfache Skripte, aber f\u00fcr gr\u00f6\u00dfere Anwendungen sollten Sie eine robustere Einrichtung mit Handlern und Formatierern in Betracht ziehen (wird sp\u00e4ter behandelt).<\/p><h5><strong>3. Angemessene Nutzung der Protokollierungsebenen<\/strong><\/h5><p>Pythons <code>Protokollierung<\/code> Modul bietet f\u00fcnf Standardstufen. Setzen Sie sie sinnvoll ein:<\/p><ul><li><strong>DEBUG:<\/strong> Detaillierte Informationen zur Diagnose von Problemen (z. B. Variablenwerte).<\/li><li><strong>INFO:<\/strong> Best\u00e4tigung, dass die Dinge wie erwartet funktionieren.<\/li><li><strong>WARNUNG:<\/strong> Ein Hinweis auf ein m\u00f6gliches Problem (z. B. die Verwendung einer veralteten Funktion).<\/li><li><strong>ERROR:<\/strong> Ein schwerwiegendes Problem, das die Beendigung einer Funktion verhindert hat.<\/li><li><strong>KRITISCH:<\/strong> Ein schwerwiegender Fehler, der zum Absturz der Anwendung f\u00fchren kann.<\/li><\/ul><p><strong>Beispiel: Verwendung von Levels<\/strong><\/p><pre>python\nlogger.debug(\"Variable x = %d\", 42)\nlogger.info(\"Benutzer erfolgreich eingeloggt\")\nlogger.warning(\"Konfigurationsdatei nicht gefunden, Standardeinstellungen verwenden\")\nlogger.error(\"Datenbankverbindung fehlgeschlagen\")\nlogger.critical(\"System hat keinen Speicher mehr, wird heruntergefahren\")<\/pre><p><strong>Bew\u00e4hrte Praxis:<\/strong> Vermeiden Sie die \u00fcberm\u00e4\u00dfige Verwendung von DEBUG in der Produktion, es sei denn, es wird herausgefiltert, da es die Protokolle \u00fcberladen kann. Setzen Sie in der Produktion die entsprechende Stufe (z. B. INFO oder h\u00f6her), um die Protokolle \u00fcberschaubar zu halten.<\/p><h5><strong>4. Kontext mit strukturierter Protokollierung hinzuf\u00fcgen<\/strong><\/h5><p>Protokolle sind am n\u00fctzlichsten, wenn sie einen Kontext bieten. Enthalten Sie relevante Details wie Benutzer-IDs, Anfrage-IDs oder Zeitstempel, um die Fehlersuche zu erleichtern.<\/p><p><strong>Beispiel: Hinzuf\u00fcgen von Kontext<\/strong><\/p><pre>python\nimportieren Logging\n\nlogger = logging.getLogger(__name__)\nbenutzer_id = 12345\nlogger.info(\"Benutzer %s authentifiziert\", user_id)\nF\u00fcr komplexere Szenarien verwenden Sie den zus\u00e4tzlichen Parameter oder benutzerdefinierte Formatierer:\npython\nlogger.info(\"Processing request\", extra={\"user_id\": user_id, \"endpoint\": \"\/api\/data\"})<\/pre><p><strong>Bew\u00e4hrte Praxis:<\/strong> Verwenden Sie String-Formatierung (%s, .format() oder f-strings) mit Logger-Methoden, um unn\u00f6tige String-Verkettungen zu vermeiden, die Ihren Code verlangsamen k\u00f6nnen, wenn die Log-Ebene deaktiviert ist.<\/p><h5><strong>5. Handler f\u00fcr flexible Ausgabe verwenden<\/strong><\/h5><p>Handler bestimmen, wohin Protokolle gehen - Konsole, Dateien, Netzwerk-Sockets usw. Die Standardeinstellung verwendet einen <code>StreamHandler<\/code> (Konsole), aber Sie k\u00f6nnen weitere hinzuf\u00fcgen.<\/p><p><strong>Beispiel: Mehrere Bearbeiter<\/strong><\/p><pre>python\nimportieren Logging\n\nlogger = logging.getLogger(__name__)\nlogger.setLevel(logging.DEBUG)\n\n#-Konsolen-Handler\nconsole_handler = logging.StreamHandler()\nconsole_handler.setLevel(logging.INFO)\n\n# Datei-Handler\nfile_handler = logging.FileHandler(\"debug.log\")\nfile_handler.setLevel(logging.DEBUG)\n\n# Formatierer\nformatter = logging.Formatter(\"%(asctime)s - %(levelname)s - %(message)s\")\nconsole_handler.setFormatter(formatter)\nfile_handler.setFormatter(formatter)\n\n# Handler zum Logger hinzuf\u00fcgen\nlogger.addHandler(console_handler)\nlogger.addHandler(datei_handler)\n\nlogger.debug(\"Dies geht nur an die Datei\")\nlogger.info(\"Dies geht sowohl an die Konsole als auch an die Datei\")<\/pre><p><strong>Bew\u00e4hrte Praxis:<\/strong> Verwenden Sie getrennte Handler f\u00fcr verschiedene Zwecke (z. B. Fehler in eine Datei, Informationen auf der Konsole) und legen Sie f\u00fcr jeden eine geeignete Stufe fest.<\/p><h5><strong>6. Rotieren von Protokollen zur Verwaltung der Gr\u00f6\u00dfe<\/strong><\/h5><p>In der Produktion k\u00f6nnen die Protokolle schnell sehr gro\u00df werden. Verwenden Sie <code>RotatingFileHandler<\/code> oder <code>TimedRotatingFileHandler<\/code> um die Dateigr\u00f6\u00dfe zu verwalten oder die Protokolle zeitabh\u00e4ngig zu rotieren.<\/p><p><strong>Beispiel: Rotierende St\u00e4mme<\/strong><\/p><pre>python\nfrom logging.handlers import RotatingFileHandler\n\nlogger = logging.getLogger(__name__)\nhandler = RotatingFileHandler(\"app.log\", maxBytes=2000, backupCount=5)\nhandler.setFormatter(logging.Formatter(\"%(asctime)s - %(message)s\"))\nlogger.addHandler(handler)\n\nfor i in range(100):\nlogger.info(\"Logmeldung %d\", i)\nmaxBytes=2000: Rotiert, wenn die Datei 2KB \u00fcberschreitet.\nbackupCount=5: Beh\u00e4lt 5 Sicherungsdateien bei (z.B. app.log.1, app.log.2).<\/pre><p><strong>Bew\u00e4hrte Praxis:<\/strong> Aktivieren Sie in der Produktion immer die Protokollrotation, um Speicherplatzprobleme zu vermeiden.<\/p><h5><strong>7. Vermeiden Sie die Aufzeichnung sensibler Daten<\/strong><\/h5><p>Protokolle landen oft in gemeinsam genutzten Systemen oder Tools von Drittanbietern. Vermeiden Sie die Protokollierung sensibler Informationen wie Passw\u00f6rter, API-Schl\u00fcssel oder pers\u00f6nliche Daten.<\/p><p><strong>Beispiel: Maskierung sensibler Daten<\/strong><\/p><pre>python\npasswort = \"geheim123\"\nlogger.debug(\"Benutzeranmeldeversuch mit Passwort: [MASKED]\") # Gut\nlogger.debug(\"Benutzeranmeldeversuch mit Passwort: %s\", Passwort) # Schlecht<\/pre><p><strong>Bew\u00e4hrte Praxis:<\/strong> Bereinigen Sie Eingaben vor der Protokollierung, oder verwenden Sie Bibliotheken wie <code>python-logging-redaction<\/code> um die Schw\u00e4rzung zu automatisieren.<\/p><h5><strong>8. Ausnahmeprotokollierung verwenden<\/strong><\/h5><p>Wenn Sie Ausnahmen behandeln, protokollieren Sie den vollst\u00e4ndigen Stack-Trace mit logger.exception(), um wichtige Debugging-Informationen zu erfassen.<\/p><p><strong>Beispiel: Protokollierung von Ausnahmen<\/strong><\/p><pre>python\nversuchen:\n    Ergebnis = 10 \/ 0\nexcept NullDivisionFehler:\n    logger.exception(\"Bei der Division ist ein Fehler aufgetreten\")<\/pre><p><strong>Ausgabe:<\/strong><br \/>ERROR:__main__:Bei der Division ist ein Fehler aufgetreten<br \/>Traceback (letzter Aufruf):<br \/>Datei \"\", Zeile 2, in<br \/>ZeroDivisionError: Division durch Null<\/p><p><strong>Bew\u00e4hrte Praxis:<\/strong> Verwenden Sie logger.exception() innerhalb von except-Bl\u00f6cken - es schlie\u00dft automatisch den Stack-Trace ein und setzt den Level auf ERROR.<\/p><h5><strong>9. Zentralisierung der Protokollierung in gr\u00f6\u00dferen Projekten<\/strong><\/h5><p>In Anwendungen mit mehreren Modulen sollten Sie die Konfiguration der Protokollierung an einem einzigen Ort zentralisieren (z. B. in einem <code>logging_config.py<\/code> Datei), um die Konsistenz zu gew\u00e4hrleisten.<\/p><p><strong>Beispiel: Zentralisierte Konfig.<\/strong><\/p><pre>python\n# logging_config.py\nimportieren logging\n\ndef setup_logging():\n    logger = logging.getLogger()\n    logger.setLevel(logging.INFO)\n\n    handler = logging.StreamHandler()\n    handler.setFormatter(logging.Formatter(\"%(asctime)s - %(name)s - %(message)s\"))\n    logger.addHandler(handler)\n\n# main.py\nfrom logging_config import setup_logging\nsetup_logging()\n\nlogger = logging.getLogger(__name__)\nlogger.info(\"Anwendung gestartet\")<\/pre><p><strong>Bew\u00e4hrte Praxis:<\/strong> Verwenden Sie eine Konfigurationsdatei (z. B. JSON oder YAML) mit <code>logging.config<\/code> f\u00fcr noch mehr Flexibilit\u00e4t bei komplexen Projekten.<\/p><h5><strong>10. Testen Sie Ihre Protokollierung<\/strong><\/h5><p>Protokollierung ist Code, und wie jeder Code sollte er getestet werden. Stellen Sie sicher, dass Ihre Protokolle unter verschiedenen Bedingungen wie erwartet funktionieren.<\/p><p><strong>Beispiel: Pr\u00fcfprotokolle<\/strong><\/p><pre>python\nimportieren logging\nunittest importieren\nvon io importieren StringIO\n\nclass TestLogging(unittest.TestCase):\n    def setUp(self):\n        self.log_output = StringIO()\n        self.handler = logging.StreamHandler(self.log_output)\n        logger = logging.getLogger(\"test\")\n        logger.addHandler(self.handler)\n        logger.setLevel(logging.INFO)\n        self.logger = logger\n\n    def test_info_log(self):\n        self.logger.info(\"Testmeldung\")\n        self.assertIn(\"Testmeldung\", self.log_output.getvalue())\n\nif __name__ == \"__main__\":\n    unittest.main()<\/pre><p><strong>Bew\u00e4hrte Praxis:<\/strong> Mock Log Handler in Unit-Tests, um die Log-Ausgabe zu \u00fcberpr\u00fcfen, ohne in Dateien oder Konsolen zu schreiben.<\/p><h5><strong>11. Leistung optimieren<\/strong><\/h5><p>Die Protokollierung kann bei \u00fcberm\u00e4\u00dfiger Nutzung die Leistung beeintr\u00e4chtigen. Befolgen Sie diese Tipps:<\/p><ul><li><strong>Verwenden Sie Lazy Evaluation:<\/strong> Vermeiden Sie teure Berechnungen in den Protokollmeldungen, es sei denn, die Stufe ist aktiviert:<\/li><li><code>Python<\/code><\/li><\/ul><p><code>if logger.isEnabledFor(logging.DEBUG)<\/code>:<\/p><ul><li><code>logger.debug(\"Aufw\u00e4ndige Berechnung: %s\", irgendeine_teure_funktion())<\/code><\/li><li><strong>Protokolle filtern:<\/strong> Stellen Sie in der Produktion h\u00f6here Werte ein, um unn\u00f6tige Verarbeitung zu vermeiden.<\/li><\/ul><p><strong>Bew\u00e4hrte Praxis:<\/strong> Erstellen Sie ein Profil Ihrer Anwendung, um sicherzustellen, dass die Protokollierung keinen Engpass darstellt.<\/p><h5><strong>12. Integration mit externen Tools<\/strong><\/h5><p>Integrieren Sie bei Produktionssystemen die Protokollierung mit Tools wie ELK Stack, Sentry oder CloudWatch. Verwenden Sie JSON-Formatierung f\u00fcr maschinenlesbare Protokolle.<\/p><p><strong>Beispiel: JSON-Protokollierung<\/strong><\/p><pre>python\nimportieren logging\njson importieren\n\nclass JSONFormatter(logging.Formatter):\n    def format(self, record):\n        log_data = {\n            \"timestamp\": self.formatTime(record),\n            \"level\": record.levelname,\n            \"message\": record.msg,\n            \"module\": record.module\n        }\n        return json.dumps(log_data)\n\nhandler = logging.StreamHandler()\nhandler.setFormatter(JSONFormatter())\nlogger = logging.getLogger(__name__)\nlogger.addHandler(handler)\nlogger.info(\"Benutzer eingeloggt\")<\/pre><p><strong>Ausgabe:<\/strong><br \/><code>{\"Zeitstempel\": \"2026-04-08 10:00:00\", \"level\": \"INFO\", \"message\": \"Benutzer eingeloggt\", \"Modul\": \"__main__\"}<\/code><\/p><p><strong>Bew\u00e4hrte Praxis:<\/strong> Verwenden Sie eine strukturierte Protokollierung f\u00fcr die Kompatibilit\u00e4t mit Tools zur Protokollaggregation.<\/p><h2><strong>Abschluss<\/strong><\/h2><p>Das Logging-Modul von Python ist ein vielseitiges Werkzeug, das bei richtiger Verwendung die Art und Weise, wie Sie Ihre Anwendungen debuggen, \u00fcberwachen und warten, ver\u00e4ndern kann. Wenn Sie diese Best Practices befolgen - Verwendung geeigneter Ebenen, Konfiguration von Handlern, Rotation von Protokollen und Vermeidung h\u00e4ufiger Fallstricke - erstellen Sie ein Protokollierungssystem, das sowohl leistungsstark als auch praktisch ist. Beginnen Sie klein mit einem Basis-Setup und erweitern Sie es dann mit Handlern, Formatierern und Integrationen, wenn Ihr Projekt w\u00e4chst.<\/p><p>Bei der Protokollierung geht es nicht nur um die Aufzeichnung von Ereignissen, sondern auch darum, die Geschichte Ihrer Anwendung zu erz\u00e4hlen. Machen Sie daraus eine lesenswerte Geschichte.<\/p><p><a href=\"https:\/\/www.carmatec.com\/de\/entwickler-einstellen\/stellen-sie-einen-python-entwickler-ein\/\">Stellen Sie erstklassige Python-Entwickler ein<\/a> aus <a href=\"https:\/\/www.carmatec.com\/de\/\">Carmatec<\/a> um skalierbare, sichere und leistungsstarke Anwendungen zu erstellen, die auf Ihre Gesch\u00e4ftsanforderungen zugeschnitten sind.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Logging is an essential part of software development, often overlooked until something goes wrong. In Python, the built-in logging module provides a powerful and flexible framework for tracking events, debugging issues, and monitoring application behavior. However, using it effectively requires more than just sprinkling print() statements or basic log calls throughout your code. This ultimate [&hellip;]<\/p>","protected":false},"author":3,"featured_media":46066,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,76],"tags":[],"class_list":["post-46049","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-python"],"_links":{"self":[{"href":"https:\/\/www.carmatec.com\/de\/wp-json\/wp\/v2\/posts\/46049","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.carmatec.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.carmatec.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.carmatec.com\/de\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.carmatec.com\/de\/wp-json\/wp\/v2\/comments?post=46049"}],"version-history":[{"count":0,"href":"https:\/\/www.carmatec.com\/de\/wp-json\/wp\/v2\/posts\/46049\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.carmatec.com\/de\/wp-json\/wp\/v2\/media\/46066"}],"wp:attachment":[{"href":"https:\/\/www.carmatec.com\/de\/wp-json\/wp\/v2\/media?parent=46049"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.carmatec.com\/de\/wp-json\/wp\/v2\/categories?post=46049"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.carmatec.com\/de\/wp-json\/wp\/v2\/tags?post=46049"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}