[python3] Implémentez facilement la fonction de sortie du journal de débogage avec journalisation et cliquez sur

Lors de l'écriture de code tout en regardant le journal de débogage, il est souvent difficile de changer la sortie ON / OFF. Par conséquent, je vais vous présenter une astuce pour changer le niveau de journalisation à partir de la ligne de commande.

Tout d'abord, les paramètres de journal normaux

Exemple de code

Tout d'abord, attachez un exemple de code pour utiliser normalement le module logging et sortir le journal sur la console. Ci-dessous, j'utilise 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()

Je vais vous expliquer brièvement.

--Le journal est défini avec set_logger. La valeur de retour «logger» est l'instance utilisée pour la sortie du journal dans le programme. --stream détermine la destination de sortie du journal. Cette fois, c'est la sortie de la console, donc j'utilise logging.StreamHandler (). Utilisez logging.FileHandler () pour sortir dans un fichier. --Ajoutez la destination de sortie spécifiée par stream à l'instance de journalisation avec logger.addHandler (stream). --Réglez le niveau de journalisation avec logger.setLevel (INFO). Cette fois, il est réglé au niveau ʻINFO (information) . --Et afficher le journal avec logger.debug ('debug')etlogger.info ('info')`.

Résultat d'exécution

Voici le résultat de l'exécution du code ci-dessus.

>python logging_test.py
info

>

Le journal de niveau INFO est sorti, mais le journal de niveau DEBUG n'est pas sorti. Pour sortir les journaux de niveau DEBUG, le paramètre de niveau de journal dans le script doit être logger.setLevel (DEBUG).

Objet: Modifier le niveau de journal à l'aide de Click

Il existe un analyseur de ligne de commande python appelé «Click». Cela facilite la mise en œuvre du processus de transmission des arguments de ligne de commande lors de l'exécution d'un fichier python. En parlant de bibliothèques de création CLI, Python Fire est très simple et pratique, mais je recommande personnellement Click, qui vous permet de spécifier explicitement les variables qui peuvent être transmises à la CLI.

Exemple de code

Utilisez Click pour modifier un peu le code précédent.

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()

Le grand changement est que la partie de réglage du niveau de journalisation et la fonction main reçoivent des décorateurs (@ click. ~Parts). Parlons de ça.

Résultat d'exécution

Voici une comparaison des résultats d'exécution lorsqu'ils sont exécutés sans spécifier -d et lorsqu'ils sont exécutés avec celui-ci spécifié.

>python logging_test.py
info

>python logging_test.py -d
debug
info

>

Si vous spécifiez -d, même le journal de niveau DEBUG est généré. En procédant ainsi, vous pouvez définir les paramètres de sortie du journal de débogage sans modifier le niveau de journal du code source à chaque fois.

référence

Enfin, voici les sites auxquels je me réfère habituellement en ce qui concerne la journalisation et Click.

Recommended Posts

[python3] Implémentez facilement la fonction de sortie du journal de débogage avec journalisation et cliquez sur
Implémentez facilement des sous-commandes avec python click
Journal de sortie au format JSON avec journalisation standard Python
Sortie du journal de test unitaire avec python
Sortie du journal Python vers la console avec GAE
Téléchargez facilement des mp3 / mp4 avec python et youtube-dl!
Lire JSON avec Python et générer un CSV
Le journal Python n'est pas sorti avec docker-compose up
J'ai essayé la synthèse de fonctions et le curry avec python
Facile à créer une application console Python avec Click
Procédure pour charger MNIST avec python et sortie en png
entrée et sortie python
Exploration avec Python et Twitter API 1 - Fonction de recherche simple
Lire le fichier json avec Python, le formater et générer le json
Sortie du journal de débogage avec GAE dev_appserver.py sur Eclipse + PyDev
Essayez d'utiliser l'API Twitter rapidement et facilement avec Python
Bibliothèque standard de journalisation Python pour la sortie de fichier par niveau de journal
Écrivez facilement des conversions de classes de données JSON et Python avec quicktype et dacite
Associez Python Enum à une fonction pour la rendre appelable
[GCP] Comment générer des journaux Cloud Functions vers Cloud Logging (Stackdriver Logging) (Python)
Créez facilement une infrastructure réseau et EC2 avec AWS CDK Python
Comment se connecter à AtCoder avec Python et soumettre automatiquement
Programmation avec Python et Tkinter
Chiffrement et déchiffrement avec Python
Implémenter la fonction de connexion avec django-allauth
Facilement sans serveur avec Python en utilisant Calice
Python et matériel - Utilisation de RS232C avec Python -
Essayez la sortie Python avec Haxe 3.2
Déboguer Python avec VS Code
Déboguer avec l'interpréteur PEPPER python
Module de débogage et de test Python
Fonctionne avec Python et R
Extraire le jeu de données bigquery et la liste des tables avec python et la sortie en CSV
Exploration avec Python et Twitter API 2-Implémentation de la fonction de recherche d'utilisateurs
Communiquez avec FX-5204PS avec Python et PyUSB
Briller la vie avec Python et OpenCV
Implémenter la fonction power.prop.test de R en python
Installez Python 2.7.9 et Python 3.4.x avec pip.
Réseau neuronal avec OpenCV 3 et Python 3
Modulation et démodulation AM avec python
Créer Apache Log CSV avec Python
Scraping avec Node, Ruby et Python
Gérez facilement les listes avec python + sqlite3
Sortie vers un fichier csv avec Python
Grattage avec Python et belle soupe
Entrée / sortie avec Python (mémo d'apprentissage Python ⑤)
Déboguer un programme multi-processus python avec VSCode
Encodage et décodage JSON avec python
Introduction à Hadoop et MapReduce avec Python
[GUI en Python] PyQt5-Glisser-déposer-
[Note] Sortie Hello world avec python
Lire et écrire NetCDF avec Python
J'ai joué avec PyQt5 et Python3
Synthèse de fonctions et application en Python
Exporter et exporter des fichiers en Python