suchen
HeimBackend-EntwicklungPython-TutorialEinfache Python-Protokollierung – und ein Exkurs über Abhängigkeiten, Vertrauen und Kopieren/Einfügen von Code

Simple Python Logging - and a digression on dependencies, trust, and Copy/pasting code

Header-Bild (C) Tai Kedzierski

Gehe zum Snippet

Dieser Beitrag ist eigensinnig.

Pythons Standardprotokolleinrichtung ist nicht hilfreich; Es widerspricht dem Ansatz „Batterien im Lieferumfang enthalten“, den wir mittlerweile erwarten.

Anhand einer nützlichen Protokollnachricht möchte ich wissen, wann, auf welchem ​​Niveau und welche Informationen. Vielleicht möchte ich es auf der Konsole, vielleicht möchte ich es in einer Datei.

Das sollte einfach sein – aber in Python muss ich jedes Mal nachschlagen, wie ich ein vollständiges Protokollierungsdienstprogramm mit benutzerdefinierter Dateiverwaltung und Zeichenfolgenformatierung erstellen kann.

Es sollte so einfach sein wie logger = getLogger(), aber aus unbekannten Gründen besteht das Standardverhalten darin, eine völlig nutzlose Formatierung bereitzustellen und keine Abkürzung für eine sinnvolle Standardeinstellung.

Das oder ich muss ein PIP-Paket unbekannter Herkunft herunterladen, darauf vertrauen, dass es nicht namentlich gekapert wurde, oder eine verschleierte Exfiltration durchführen. Da fällt mir der Leftpad-Vorfall aus dem Jahr 2016 ein, ebenso wie der Revival-Hijack-Angriff aus dem Jahr 2024, der im Wesentlichen das gleiche Problem in einem anderen Repo-System darstellte.

Tatsächlich ist jedes Benutzer-Repo ohne Namensraum dafür anfällig: Node's npm, Python's pip, Arch's AUR, Canonical's snap ... um nur eine Handvoll zu nennen, die Benutzern einfach erlauben, alles hochzuladen. Nicht einmal die Angabe von Namensräumen ist eine Garantie für Vertrauen – ich bin auf Projekte gestoßen, die ihre Software über diese Kanäle nicht über den Projektnamen, sondern über den Spitznamen eines beliebigen Entwicklers vertreiben, was Zweifel an der Authentizität des Pakets aufkommen lässt. Ich habe in einem früheren Beitrag über die Verwendung von Synchronisierung in einer Arbeitsumgebung meine Gedanken darüber dargelegt, wie ich entscheiden soll, ob ich einer Quelle vertrauen soll.

Externe Abhängigkeiten in benutzergesteuerten Repos sind der Teufel und sollten nur in Betracht gezogen werden, wenn die Lösung eines Problems komplex ist. Und im Allgemeinen sollten einfache Lösungen einfach direkt in der Codebasis vorhanden sein – idealerweise selbst geschrieben, aber manchmal dringt das Problem nur in den „umständlichen“ Bereich ein, sodass sich eine Abhängigkeit sowohl vernünftig als auch eklig anfühlt.

Die Antwort: Schreiben Sie es einmal, verstauen Sie es in einem Github-Gist oder in einem eigenen „Nützliche Snippets“-Repo. Kopieren und einfügen.

Kopieren Einfügen? Puh!

Das „Kopieren und Einfügen“ von Code löst bei jedem erfahrenen Programmierer wahrscheinlich Alarmglocken aus. „Wiederholen Sie sich nicht“, „verwenden Sie einen Paketmanager“, „einmal schreiben, überall aktualisieren.“ Das sind gute Instinkte, aber von Fall zu Fall ist es auch gut zu wissen, wann Kopieren und Einfügen vorzugsweise ist.

In diesem Fall besteht die Anforderung darin, unnötige externe Abhängigkeiten zu vermeidenfür eine einfache Lösung für ein einfaches Bedürfnis . Im Leftpad wie bei diesem Mini-Logger ist das erforderliche Code-Snippet kurz und leicht verständlich; Es ist kein Verlust, es bei Bedarf erneut zu implementieren. Es ist auch entsprechend lizenziert (ja, es kann sich nur um einen Ausschnitt handeln; es wird jedoch weiterhin empfohlen, sicherzustellen, dass das, was Sie kopieren, tatsächlich zulässig ist. Seien Sie vorsichtig beim Kopieren zufälliger Code-Blobs.)

Mini-Logger-Snippet

Ich füge unten einen Codeausschnitt für ein Mini-Logger-Dienstprogramm ein, das einen einzelnen Aufruf mit minimaler Konfiguration ermöglicht:

from minilog import SimpleLogger

LOG = SimpleLogger(name="mylog", level=SimpleLogger.INFO)

LOG.info("this is useful")

Was auf der Konsole gedruckt wird:

2024-11-20 10:43:44,567 | INFO | mylog : this is useful

Der Mini-Logger-Code

Kopieren Sie dies in eine minilogger.py-Datei in Ihrem Projekt. Tada – keine externe Abhängigkeit erforderlich. Unangetastet bleibt es für immer dasselbe. Keine Namensentführung. Keine Supply-Chain-Injektion.

# For completeness:
# (C) Tai Kedzierski - Provided under MIT license. Go wild.

import logging

class SimpleLogger(logging.Logger):
    FORMAT_STRING = '%(asctime)s | %(levelname)s | %(name)s : %(message)s'
    ERROR = logging.ERROR
    WARN = logging.WARN
    INFO = logging.INFO
    DEBUG = logging.DEBUG

    def __init__(self, name="main", fmt_string=FORMAT_STRING, level=logging.WARNING, console=True, files=None):
        logging.Logger.__init__(self, name, level)
        formatter_obj = logging.Formatter(fmt_string)

        if files is None:
            files = []
        elif isinstance(files, str):
            files = [files]

        def _add_stream(handler:logging.Handler, **kwargs):
            handler = handler(**kwargs)
            handler.setLevel(level)
            handler.setFormatter(formatter_obj)
            self.addHandler(handler)

        if console is True:
            _add_stream(logging.StreamHandler, stream=sys.stdout)

        for filepath in files:
            _add_stream(logging.FileHandler, filename=filepath)

Mit der MIT-Lizenz können Sie im Wesentlichen „damit machen, was Sie wollen“. Keine Bedingungen geknüpft.

Da sind wir. Ein einfaches Protokoll ?

Das obige ist der detaillierte Inhalt vonEinfache Python-Protokollierung – und ein Exkurs über Abhängigkeiten, Vertrauen und Kopieren/Einfügen von Code. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Der 2-stündige Python-Plan: ein realistischer AnsatzDer 2-stündige Python-Plan: ein realistischer AnsatzApr 11, 2025 am 12:04 AM

Sie können grundlegende Programmierkonzepte und Fähigkeiten von Python innerhalb von 2 Stunden lernen. 1. Lernen Sie Variablen und Datentypen, 2. Master Control Flow (bedingte Anweisungen und Schleifen), 3.. Verstehen Sie die Definition und Verwendung von Funktionen, 4. Beginnen Sie schnell mit der Python -Programmierung durch einfache Beispiele und Code -Snippets.

Python: Erforschen der primären AnwendungenPython: Erforschen der primären AnwendungenApr 10, 2025 am 09:41 AM

Python wird in den Bereichen Webentwicklung, Datenwissenschaft, maschinelles Lernen, Automatisierung und Skripten häufig verwendet. 1) In der Webentwicklung vereinfachen Django und Flask Frameworks den Entwicklungsprozess. 2) In den Bereichen Datenwissenschaft und maschinelles Lernen bieten Numpy-, Pandas-, Scikit-Learn- und TensorFlow-Bibliotheken eine starke Unterstützung. 3) In Bezug auf Automatisierung und Skript ist Python für Aufgaben wie automatisiertes Test und Systemmanagement geeignet.

Wie viel Python können Sie in 2 Stunden lernen?Wie viel Python können Sie in 2 Stunden lernen?Apr 09, 2025 pm 04:33 PM

Sie können die Grundlagen von Python innerhalb von zwei Stunden lernen. 1. Lernen Sie Variablen und Datentypen, 2. Master -Steuerungsstrukturen wie wenn Aussagen und Schleifen, 3. Verstehen Sie die Definition und Verwendung von Funktionen. Diese werden Ihnen helfen, einfache Python -Programme zu schreiben.

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer-Anfänger-Programmierbasis in Projekt- und problemorientierten Methoden?Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer-Anfänger-Programmierbasis in Projekt- und problemorientierten Methoden?Apr 02, 2025 am 07:18 AM

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer -Anfänger für Programmierungen? Wenn Sie nur 10 Stunden Zeit haben, um Computer -Anfänger zu unterrichten, was Sie mit Programmierkenntnissen unterrichten möchten, was würden Sie dann beibringen ...

Wie kann man vom Browser vermeiden, wenn man überall Fiddler für das Lesen des Menschen in der Mitte verwendet?Wie kann man vom Browser vermeiden, wenn man überall Fiddler für das Lesen des Menschen in der Mitte verwendet?Apr 02, 2025 am 07:15 AM

Wie kann man nicht erkannt werden, wenn Sie Fiddlereverywhere für Man-in-the-Middle-Lesungen verwenden, wenn Sie FiddLereverywhere verwenden ...

Was soll ich tun, wenn das Modul '__builtin__' beim Laden der Gurkendatei in Python 3.6 nicht gefunden wird?Was soll ich tun, wenn das Modul '__builtin__' beim Laden der Gurkendatei in Python 3.6 nicht gefunden wird?Apr 02, 2025 am 07:12 AM

Laden Sie Gurkendateien in Python 3.6 Umgebungsbericht Fehler: ModulenotFoundError: Nomodulennamen ...

Wie verbessert man die Genauigkeit der Jiebeba -Wortsegmentierung in der malerischen Spot -Kommentaranalyse?Wie verbessert man die Genauigkeit der Jiebeba -Wortsegmentierung in der malerischen Spot -Kommentaranalyse?Apr 02, 2025 am 07:09 AM

Wie löste ich das Problem der Jiebeba -Wortsegmentierung in der malerischen Spot -Kommentaranalyse? Wenn wir malerische Spot -Kommentare und -analysen durchführen, verwenden wir häufig das Jieba -Word -Segmentierungstool, um den Text zu verarbeiten ...

Wie benutze ich den regulären Ausdruck, um das erste geschlossene Tag zu entsprechen und anzuhalten?Wie benutze ich den regulären Ausdruck, um das erste geschlossene Tag zu entsprechen und anzuhalten?Apr 02, 2025 am 07:06 AM

Wie benutze ich den regulären Ausdruck, um das erste geschlossene Tag zu entsprechen und anzuhalten? Im Umgang mit HTML oder anderen Markup -Sprachen sind häufig regelmäßige Ausdrücke erforderlich, um ...

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

Dreamweaver Mac

Dreamweaver Mac

Visuelle Webentwicklungstools

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung