Journalisation Python et vidage vers json

Le package ** logging ** fourni en standard est facile à utiliser, mais il est raisonnable. J'ai l'impression que le gestionnaire de fichiers n'est pas tué tant que le script n'est pas mort. Voici un exemple simple de comportement personnellement inattendu. (Peut-être que c'est le bon comportement ... Dites-m'en plus!)

sample_logging.py


from datetime import datetime as dt
import os, logging
def main():
  for i in xrange(1,6):
    log = logging.getLogger()
    
    #i-ème répertoire de répétition
    dir_name = "dir_{0}".format(i)
    os.makedirs(dir_name)

    #Fichier journal (que vous souhaitez créer) pour le i-ème répertoire de répétition
    log_file_name = "{0}/lg_index{1}.log".format(dir_name, i)
    logging.basicConfig(level = logging.INFO,\
                        filename = log_file_name,\
                        format = "[%(name)s: %(levelname)s @ %(asctime)s] %(message)s")

    # log
    log.info('hoge')
    log.info('foo')
    log.info(dt.now().strftime('%Y%m%d%H%M%S))

En guise de ressenti, dans chaque répertoire de dir_1, dir_2, ..., dir_5 Je voulais écrire un journal quand j'ai fait quelque chose, mais quand je fais ça Dans le fichier journal (dir_1 / lg_index1.log "de dir_1 où la journalisation a été définie en premier Toutes les informations (car level = logging.INFO dans ce cas) sont écrites. (Cette utilisation peut ne pas être correcte / froide en premier lieu.)

Contre-mesure 1 (Gestion des gestionnaires de fichiers / N'est-ce pas trop beau?)

J'y ai fait référence (* j'ai été pressé par la copie)

sample_logging_new.py


from datetime import datetime as dt
import os, logging
def main():
  for i in xrange(1,6):
    log = logging.getLogger()
    
    #i-ème répertoire de répétition
    dir_name = "dir_{0}".format(i)
    os.makedirs(dir_name)

    #Fichier journal (que vous souhaitez créer) pour le i-ème répertoire de répétition
    log_file_name = "{0}/lg_index{1}.log".format(dir_name, i)
    log.setLevel(logging.INFO)
    fh = logging.FileHandler(filename = log_file_name)
    formatter = logging.Formatter(
        fmt='"[%(name)s: %(levelname)s @ %(asctime)s] %(message)s"',
        datefmt='%Y-%m-%d %H:%M:%S')
    fh.setFormatter(formatter)
    log.addHandler(fh)    

    # log
    log.info('hoge')
    log.info('foo')
    log.info(dt.now().strftime('%Y%m%d%H%M%S))

    # close file handler
    log.removeHandler(fh)
    del log, fh

Contre-mesure 2 (Si vous utilisez de toute façon un gestionnaire de fichiers, écrivez-le directement)

@shima__shima m'a appris.

sample_logging_json.py


from datetime import datetime as dt
import os, json
def main():
  for i in xrange(1,6):
    #i-ème répertoire de répétition
    info = {} #Dictionnaire pour mettre des données
    dir_name = "dir_{0}".format(i)
    os.makedirs(dir_name)

    #Fichier journal (que vous souhaitez créer) pour le i-ème répertoire de répétition
    log_file_name = "{0}/lg_index{1}.log".format(dir_name, i)
    info['hoge'] = 0
    info['foo'] = 0
    info['bar'] = dt.now().strftime('%Y%m%d%H%M%S)
    
    #Exporter le fichier json
    with open(log_file_name, 'w') as f:
        json.dump(info, f)

Je pensais que je n'avais pas à utiliser la journalisation si je voulais juste écrire des informations (paramètres, heure, etc.).

Recommended Posts

Journalisation Python et vidage vers json
Python 3.6 sous Windows ... et vers Xamarin.
[Introduction à Python] Comment analyser JSON
Encodage et décodage JSON avec python
Python #JSON
Sélénium et python pour ouvrir Google
Journalisation Python
Comment empaqueter et distribuer des scripts Python
Essayez de vous connecter à qiita avec Python
De Python à l'utilisation de MeCab (et CaboCha)
Comment installer et utiliser pandas_datareader [Python]
Convertir des données Excel en JSON avec python
Fractal pour faire et jouer avec Python
Portage et modification du solveur de doublets de python2 vers python3.
Lire Python csv et exporter vers txt
Lire et écrire des fichiers JSON avec Python
Vider les données SQLite3 et migrer vers MySQL
Vider les tables BigQuery dans GCS à l'aide de Python
python: Comment utiliser les locals () et globals ()
[Python] Comment calculer MAE et RMSE
Comment utiliser le zip Python et énumérer
Compressez les données python et écrivez sur sqlite
Comment utiliser is et == en Python
"Backport" vers python 2
Grattage de la nourriture avec python et sortie en CSV
MessagePack-Try pour lier Java et Python avec RPC
Comment générer une séquence en Python et C ++
[Introduction à Python3 Jour 12] Chapitre 6 Objets et classes (6.3-6.15)
Texte de l'image et publication sur slack (python slackbot)
Lire JSON avec Python et générer un CSV
Comment créer un fichier JSON en Python
[Introduction à Python3, jour 22] Chapitre 11 Traitement parallèle et mise en réseau (11.1 à 11.3)
Lire et écrire des fichiers CSV et JSON avec Python
Envoyer un message à Skype et Chatwork en Python
[Introduction à Python] Comment gérer les données au format JSON
[Introduction à l'application Udemy Python3 +] 64. Espace de noms et portée
[Introduction à Python3 Jour 11] Chapitre 6 Objets et classes (6.1-6.2)
[Python3] Lecture et écriture avec isoformat datetime avec json
POST JSON avec Python et recevez avec PHP
Conversion par lots de fichiers Excel en JSON [Python]
Liste de code Python à déplacer et à mémoriser
Pour représenter la date, l'heure, l'heure et les secondes en Python
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python
[python] Compresser et décompresser
Convertir la date et l'heure zonées en temps Unixtime dans Python2.7
Analyser une chaîne JSON écrite dans un fichier en Python
Astuces Python et Numpy
[Python] Convertit les nombres décimaux en nombres binaires, octaux et hexadécimaux
[Python] [Django] Comment utiliser le champ de choix et comment ajouter des options
[Python] pip et roue
[Python] Utiliser JSON avec Python
Comment installer Python
[Python] Convertit un conteneur à usage général et une classe entre eux
Changements de Python 3.0 à Python 3.5
[Python3] Connexion à Oracle Database et exécution de SQL [cx_Oracle]
Changements de Python 2 à Python 3.0
Itérateur et générateur Python
Je veux gérer l'optimisation avec python et cplex
Manipulation de json en python