Journal de sortie au format JSON avec journalisation standard Python

Comment utiliser la journalisation

Tout d'abord, les bases. Écrivez le journal côté bibliothèque et Décidez comment gérer le journal côté client.

Library side

Tout d'abord, ajoutez les 4 lignes suivantes au début de chaque fichier

from logging import getLogger, DEBUG, NullHandler
logger = getLogger(__name__)
logger.addHandler(NullHandler())
logger.setLevel(DEBUG)

Cela affichera logger avec .debug, .info, etc.

logger.info("Enter special block")

Puisque NullHandler est enregistré, ce journal sera ignoré si le client ne le capture pas.

Client side

Le nom de l'enregistreur côté bibliothèque est enregistré avec «name». Par exemple, il est enregistré avec des noms tels que «mod.submod1» et «mod.submod2». Puisqu'il est superposé avec ., vous pouvez recevoir les logs des deux sous-modules en le référençant avec mod. Si aucun nom n'est donné, tous les journaux seront collectés.

import logging
logger = logging.getLogger()
logger.addHandler(logging.StreamHandler())
logger.setLevel(logging.DEBUG)

--Ouvrir le journal d'INFO ou supérieur du module mod dans un fichier ( mod.log)

import logging
logger = logging.getLogger("mod")
logger.addHandler(logging.FileHandler("mod.log", mode="w"))
logger.setLevel(logging.INFO)

Bien entendu, il est possible de préparer une fonction côté bibliothèque qui permet au client d'exécuter facilement ces codes.

Sortie en JSON

Compte tenu de l'analyse ultérieure, je veux un journal structuré. En fait, vous pouvez donner un objet dictionnaire tel que logger.info:

logger.info({
  "key": value,
  "homhom": 0,
})

Si vous ne le définissez pas en particulier, le résultat de `` imprimer '' sera normalement affiché, donc il ressemble à JSON, mais Ce n'est pas un JSON formel, il est donc difficile de l'analyser. C'est là que python jsonlogger entre en jeu. Il sera reformaté en JSON lors de la sortie côté client.

Pour sortir dans le fichier ci-dessus:

import logging
from pythonjsonlogger import jsonlogger
h = logging.FileHandler("mod.log", mode="w")
h.setFormatter(jsonlogger.JsonFormatter())
logging.getLogger("mod").addHandler(h)

Cela produira un journal JSON valide pour chaque ligne. Alors connectez-vous

with open("mod.log") as f:
    df = pd.DataFrame([json.loads(l) for l in f])

Il peut être facilement versé dans des pandas comme.

Recommended Posts

Journal de sortie au format JSON avec journalisation standard Python
Formatez facilement JSON avec Python
Formater json avec Vim (avec python)
Obtenez une sortie standard en temps réel avec le sous-processus Python
Lire le fichier json avec Python, le formater et générer le json
Rendre la sortie standard non bloquante en Python
Sortie du journal de test unitaire avec python
Bibliothèque standard de journalisation Python pour la sortie de fichier par niveau de journal
Facile avec juste Python! Affichez les figures Graphviz au format draw.io!
Essayez de vous connecter à qiita avec Python
Entrée / sortie de données en Python (CSV, JSON)
Sortie du journal Python vers la console avec GAE
Bonnes pratiques pour la journalisation au format JSON sur AWS Lambda / Python
UnicodeEncodeError lutte avec la sortie standard de python3
format en python
[python3] Implémentez facilement la fonction de sortie du journal de débogage avec journalisation et cliquez sur
Lire JSON avec Python et générer un CSV
Le journal Python n'est pas sorti avec docker-compose up
Connectez-vous à Yahoo Business avec Selenium Python
Comment générer "Ketsumaimo" en standard en Python
[CentOS8] Comment afficher la sortie Python standard dans le journal systemd
[Python] Utiliser JSON avec Python
Format d'image en Python
Sortie japonaise avec Python
Obtenez des résultats au format dict avec Python psycopg2
Joli imprimé json ou yaml avec couleur en python
Convertir / renvoyer des objets de classe au format JSON en Python
Trouvez la date de cette semaine dans n'importe quel format avec python
Sortie japonaise lors de l'utilisation de python dans Visual Studio
Grattage au sélénium en Python
Grattage avec chromedriver en python
POST json avec le script Python 3
Débogage avec pdb en Python
Essayez la sortie Python avec Haxe 3.2
Tester la sortie standard avec Pytest
Gérer les sons en Python
Grattage avec du sélénium en Python
Grattage avec Tor en Python
Matrice transposée au standard Python
Tweet avec image en Python
Combiné avec ordinal en Python
Format de chaîne avec l'opérateur Python%
Lire la sortie Fortran avec python
Lire des données json avec python
Comment sortir un document au format pdf avec Sphinx
Changer la destination de sortie standard en un fichier en Python
[Pour les débutants] Résumé de l'entrée standard en Python (avec explication)
[Selenium] Changer la destination de sortie du journal lors de l'exécution de phantomjs avec python3
[GCP] Comment générer des journaux Cloud Functions vers Cloud Logging (Stackdriver Logging) (Python)
Comment se connecter à AtCoder avec Python et soumettre automatiquement
Reconnaissance des nombres dans les images avec Python
Convertir en chaîne lors de la sortie de la sortie standard avec le sous-processus Python
Exporter les données DB au format json
Comment ne pas échapper au japonais en traitant avec JSON en Python
Tester avec des nombres aléatoires en Python
Représentation matricielle avec entrée standard Python
Sortie de la liste du vendredi Premium 2017 en Python
[Python] journalisation dans votre propre module
GOTO en Python avec Sublime Text 3