


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!

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 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.

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 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 nicht erkannt werden, wenn Sie Fiddlereverywhere für Man-in-the-Middle-Lesungen verwenden, wenn Sie FiddLereverywhere verwenden ...

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

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? Im Umgang mit HTML oder anderen Markup -Sprachen sind häufig regelmäßige Ausdrücke erforderlich, um ...


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

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
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

EditPlus chinesische Crack-Version
Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

Dreamweaver Mac
Visuelle Webentwicklungstools

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung