[python3] Implementieren Sie die Debug-Protokollausgabefunktion einfach mit Protokollierung und Klicken

Wenn Sie beim Betrachten des Debug-Protokolls Code schreiben, ist es häufig schwierig, die Ausgabe ein- oder auszuschalten. Daher werde ich einen Trick einführen, um die Protokollstufe über die Befehlszeile zu ändern.

Zunächst normale Protokolleinstellungen

Codebeispiel

Fügen Sie zunächst ein Codebeispiel hinzu, um das Protokollierungsmodul normal zu verwenden und das Protokoll an die Konsole auszugeben. Unten verwende ich Python3.7.

logging_test.py


import logging

from logging import DEBUG, INFO


def set_logger():
    logger = logging.getLogger('logname')
    stream = logging.StreamHandler()
    logger.addHandler(stream)

    logger.setLevel(INFO)

    return logger


def main():
    logger = set_logger()

    logger.debug('debug')
    logger.info('info')


if __name__ == "__main__":
    main()

Ich werde es kurz erklären.

--Das Protokoll wird mit set_logger gesetzt. Der Rückgabewert "logger" ist die Instanz, die für die Protokollausgabe im Programm verwendet wird. --stream bestimmt das Ausgabeziel des Protokolls. Diesmal handelt es sich um eine Konsolenausgabe, daher verwende ich "logging.StreamHandler ()". Verwenden Sie logging.FileHandler (), um in eine Datei auszugeben.

Ausführungsergebnis

Hier ist das Ergebnis der Ausführung des obigen Codes.

>python logging_test.py
info

>

Das INFO-Level-Protokoll wird ausgegeben, aber das DEBUG-Level-Protokoll wird nicht ausgegeben. Um Protokolle auf DEBUG-Ebene auszugeben, muss die Protokollstufeneinstellung im Skript "logger.setLevel (DEBUG)" sein.

Betreff: Ändern Sie die Protokollebene mit Click

Es gibt einen Python-Befehlszeilenparser namens "Click". Dies macht es einfach, den Prozess der Übergabe von Befehlszeilenargumenten beim Ausführen einer Python-Datei zu implementieren. In Bezug auf CLI-Erstellungsbibliotheken ist Python Fire sehr einfach und bequem, aber ich persönlich empfehle Click, mit dem Sie explizit Variablen angeben können, die an die CLI übergeben werden können.

Codebeispiel

Verwenden Sie Klicken, um den Code ein wenig zu optimieren.

logging_test.py


import click
import logging

from logging import DEBUG, INFO


def set_logger(debug_mode):
    logger = logging.getLogger('logname')
    stream = logging.StreamHandler()
    logger.addHandler(stream)

    if debug_mode is True:
        logger.setLevel(DEBUG)
    else:
        logger.setLevel(INFO)

    return logger


@click.command()
@click.option('--debug_mode', '-d', is_flag=True, 
              help='Show debug log')
def main(debug_mode):
    logger = set_logger(debug_mode)

    logger.debug('debug')
    logger.info('info')


if __name__ == "__main__":
    main()

Die große Änderung besteht darin, dass der Teil zur Einstellung der Protokollebene und die Hauptfunktion Dekoratoren erhalten (@ click. ~ `Teile). Lass uns darüber sprechen.

Ausführungsergebnis

Hier ist ein Vergleich der Ausführungsergebnisse, wenn sie ohne Angabe von "-d" ausgeführt werden und wenn sie mit "angegeben" ausgeführt werden.

>python logging_test.py
info

>python logging_test.py -d
debug
info

>

Wenn Sie -d angeben, wird sogar das DEBUG-Level-Protokoll ausgegeben. Auf diese Weise können Sie die Ausgabeeinstellungen des Debug-Protokolls festlegen, ohne die Protokollstufe des Quellcodes jedes Mal zu ändern.

Referenz

Schließlich sind hier die Websites, auf die ich normalerweise in Bezug auf Protokollierung und Klicken verweise.

Recommended Posts

[python3] Implementieren Sie die Debug-Protokollausgabefunktion einfach mit Protokollierung und Klicken
Implementieren Sie einfach Unterbefehle mit Python-Klick
Ausgabeprotokoll im JSON-Format mit Python-Standardprotokollierung
Unit Test Log Ausgabe mit Python
Python-Protokoll mit GAE an die Konsole ausgeben
Laden Sie einfach mp3 / mp4 mit Python und youtube-dl herunter!
Lesen Sie JSON mit Python und geben Sie CSV aus
Python-Protokoll wird nicht mit Docker-Compose ausgegeben
Ich habe Funktionssynthese und Curry mit Python versucht
Erstellen Sie einfach eine Python-Konsolenanwendung mit Click
Prozedur zum Laden von MNIST mit Python und zur Ausgabe an png
Python-Eingabe und Ausgabe
Crawlen mit Python und Twitter API 1-Einfache Suchfunktion
Lesen Sie die json-Datei mit Python, formatieren Sie sie und geben Sie json aus
Debug-Protokoll mit GAE dev_appserver.py auf Eclipse + PyDev ausgeben
Versuchen Sie, mit Python schnell und einfach auf die Twitter-API zuzugreifen
Python-Protokollierungsstandardbibliothek für die Dateiausgabe nach Protokollebene
Schreiben Sie einfach JSON- und Python-Datenklassenkonvertierungen mit Quicktype und Dacite
Verknüpfen Sie Python Enum mit einer Funktion, um es aufrufbar zu machen
[GCP] Ausgeben von Cloud-Funktionsprotokollen an Cloud Logging (Stackdriver Logging) (Python)
Erstellen Sie mit AWS CDK Python ganz einfach Netzwerkinfrastruktur und EC2
So melden Sie sich mit Python bei AtCoder an und senden automatisch
Programmieren mit Python und Tkinter
Ver- und Entschlüsselung mit Python
Implementieren Sie die Anmeldefunktion mit django-allauth
Mit Python mit Kelch ganz einfach ohne Server
Python und Hardware-Verwenden von RS232C mit Python-
Probieren Sie die Python-Ausgabe mit Haxe 3.2 aus
Debuggen Sie Python mit VS-Code
Debuggen mit dem PEPPER Python Interpreter
Python-Debug- und Testmodul
Funktioniert mit Python und R.
Extrahieren Sie das Bigquery-Dataset und die Tabellenliste mit Python und geben Sie es in CSV aus
Crawlen mit Python und Twitter API 2-Implementierung der Benutzersuchfunktion
Kommunizieren Sie mit FX-5204PS mit Python und PyUSB
Leuchtendes Leben mit Python und OpenCV
Implementieren Sie die Funktion power.prop.test von R in Python
Installieren Sie Python 2.7.9 und Python 3.4.x mit pip.
Neuronales Netzwerk mit OpenCV 3 und Python 3
AM-Modulation und Demodulation mit Python
Machen Sie Apache Log CSV mit Python
Scraping mit Node, Ruby und Python
Einfache Handhabung von Listen mit Python + SQLite3
Ausgabe in eine CSV-Datei mit Python
Kratzen mit Python und schöner Suppe
Eingabe / Ausgabe mit Python (Python-Lernnotiz ⑤)
Debuggen Sie das Python-Multiprozessprogramm mit VSCode
JSON-Codierung und -Decodierung mit Python
Hadoop-Einführung und MapReduce mit Python
[GUI in Python] PyQt5-Drag & Drop-
[Hinweis] Hallo Weltausgabe mit Python
Lesen und Schreiben von NetCDF mit Python
Ich habe mit PyQt5 und Python3 gespielt
Funktionssynthese und Anwendung in Python
Exportieren und Ausgeben von Dateien in Python