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.
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.
stream
angegebene Ausgabeziel mit logger.addHandler (stream)
zur Logger-Instanz hinzu.
--Stellen Sie die Protokollebene mit "logger.setLevel (INFO)" ein. Dieses Mal wird es auf die Ebene "INFO (Information)" gesetzt.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.
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.
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.
main
übergeben werden soll. Die Argumente sind in der Reihenfolge von links die Beschreibung, wenn die Option long, die Option short, das Flag (True / False) und die Option help angegeben werden. Wenn Sie zur Laufzeit "--debug_mode" oder "-d" hinzufügen, lautet die Variable "debug_mode" "True".debug_mode
an die Funktion set_logger
übergeben. Wenn die Option -d
angegeben ist, lautet die Protokollstufe DEBUG, und wenn nicht angegeben, lautet sie INFO.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.
Schließlich sind hier die Websites, auf die ich normalerweise in Bezug auf Protokollierung und Klicken verweise.
Recommended Posts