Python-Protokollierung und Dump an JSON

Das standardmäßig mitgelieferte ** Protokollierungspaket ** ist einfach zu verwenden, aber vernünftig. Ich habe das Gefühl, dass der Dateihandler erst getötet wird, wenn das Skript stirbt. Das Folgende ist ein einfaches Beispiel für persönlich unerwartetes Verhalten. (Vielleicht ist das das richtige Verhalten ... Erzähl mir mehr!)

sample_logging.py


from datetime import datetime as dt
import os, logging
def main():
  for i in xrange(1,6):
    log = logging.getLogger()
    
    #i-te Wiederholungsverzeichnis
    dir_name = "dir_{0}".format(i)
    os.makedirs(dir_name)

    #Protokolldatei (erstellen möchten) für das i-te Wiederholungsverzeichnis
    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))

Als Gefühl, in jedem Verzeichnis von dir_1, dir_2, ..., dir_5 Ich wollte ein Protokoll schreiben, wenn ich etwas tat, aber wenn ich das tue In der Protokolldatei (dir_1 / lg_index1.log "von dir_1, in der die Protokollierung zuerst festgelegt wurde Alle Informationen (in diesem Fall weil level = logging.INFO) werden ausgeschrieben. (Diese Verwendung ist möglicherweise überhaupt nicht korrekt / cool.)

Gegenmaßnahme 1 (Umgang mit Dateihandlern / Ist es nicht zu schön?)

Ich bezog mich darauf (* Ich wurde durch Kopieren gequetscht)

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-te Wiederholungsverzeichnis
    dir_name = "dir_{0}".format(i)
    os.makedirs(dir_name)

    #Protokolldatei (erstellen möchten) für das i-te Wiederholungsverzeichnis
    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

Gegenmaßnahme 2 (Wenn Sie trotzdem einen Dateihandler verwenden, schreiben Sie ihn direkt aus.)

@shima__shima hat mich unterrichtet.

sample_logging_json.py


from datetime import datetime as dt
import os, json
def main():
  for i in xrange(1,6):
    #i-te Wiederholungsverzeichnis
    info = {} #Wörterbuch zum Einfügen von Daten
    dir_name = "dir_{0}".format(i)
    os.makedirs(dir_name)

    #Protokolldatei (erstellen möchten) für das i-te Wiederholungsverzeichnis
    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)
    
    #Exportieren Sie die JSON-Datei
    with open(log_file_name, 'w') as f:
        json.dump(info, f)

Ich dachte, ich müsste keine Protokollierung verwenden, wenn ich nur Informationen (Parameter, Zeit usw.) ausschreiben möchte.

Recommended Posts

Python-Protokollierung und Dump an JSON
Python 3.6 unter Windows ... und zu Xamarin.
[Einführung in Python] So analysieren Sie JSON
JSON-Codierung und -Decodierung mit Python
Python #JSON
Selen und Python zum Öffnen von Google
Python-Protokollierung
So verpacken und verteilen Sie Python-Skripte
Versuchen Sie, sich mit Python bei qiita anzumelden
Von Python bis zur Verwendung von MeCab (und CaboCha)
So installieren und verwenden Sie pandas_datareader [Python]
Konvertieren Sie Excel-Daten mit Python in JSON
Fraktal zum Erstellen und Spielen mit Python
Portieren und Ändern des Doublet-Solvers von Python2 auf Python3.
Lesen Sie Python csv und exportieren Sie es nach txt
Lesen und schreiben Sie JSON-Dateien mit Python
Speichern Sie SQLite3-Daten und migrieren Sie zu MySQL
Speichern Sie BigQuery-Tabellen mithilfe von Python in GCS
Python: Verwendung von Einheimischen () und Globalen ()
[Python] Berechnen von MAE und RMSE
Verwendung von Python zip und Aufzählung
Komprimieren Sie Python-Daten und schreiben Sie in SQLite
Verwendung ist und == in Python
"Backport" zu Python 2
Kratzen Sie das Essen mit Python und geben Sie es an CSV aus
MessagePack-Versuchen Sie, Java und Python mit RPC zu verbinden
So generieren Sie eine Sequenz in Python und C ++
[Einführung in Python3 Tag 12] Kapitel 6 Objekte und Klassen (6.3-6.15)
Bildtext und Post to Slack (Python Slackbot)
Lesen Sie JSON mit Python und geben Sie CSV aus
So erstellen Sie eine JSON-Datei in Python
[Einführung in Python3, Tag 22] Kapitel 11 Parallele Verarbeitung und Vernetzung (11.1 bis 11.3)
Lesen und Schreiben von CSV- und JSON-Dateien mit Python
Senden Sie eine Nachricht an Skype und Chatwork in Python
[Einführung in Python] Umgang mit Daten im JSON-Format
[Einführung in die Udemy Python3 + -Anwendung] 64. Namespace und Gültigkeitsbereich
[Einführung in Python3 Tag 11] Kapitel 6 Objekte und Klassen (6.1-6.2)
[Python3] Lesen und Schreiben mit datetime isoformat mit json
POST JSON mit Python und empfange mit PHP
Stapelkonvertierung von Excel-Dateien in JSON [Python]
Liste des zu verschiebenden und zu merkenden Python-Codes
Zur Darstellung von Datum, Uhrzeit, Uhrzeit und Sekunden in Python
Wie man Autokorrelation und partielle Autokorrelation mit Python zeichnet
[Python] Komprimieren und dekomprimieren
Konvertieren Sie Datum und Uhrzeit in Zeitzonen in Unixtime in Python2.7
Analysieren Sie eine JSON-Zeichenfolge, die in eine Datei in Python geschrieben wurde
Python- und Numpy-Tipps
[Python] Konvertieren Sie Dezimalzahlen in Binär-, Oktal- und Hexadezimalzahlen
[Python] [Django] Verwendung des Auswahlfelds und Hinzufügen von Optionen
[Python] Pip und Wheel
[Python] Verwenden Sie JSON mit Python
So installieren Sie Python
[Python] Konvertieren Sie Allzweckcontainer und Klasse ineinander
Änderungen von Python 3.0 zu Python 3.5
[Python3] Herstellen einer Verbindung zur Oracle-Datenbank und Ausführen von SQL [cx_Oracle]
Änderungen von Python 2 zu Python 3.0
Python Iterator und Generator
Ich möchte die Optimierung mit Python und CPlex behandeln
Umgang mit Json in Python