Zunächst die Grundlagen. Schreiben Sie das Protokoll auf die Bibliotheksseite und Entscheiden Sie, wie das Protokoll auf der Clientseite behandelt werden soll.
Library side
Fügen Sie zunächst die folgenden 4 Zeilen am Anfang jeder Datei hinzu
from logging import getLogger, DEBUG, NullHandler
logger = getLogger(__name__)
logger.addHandler(NullHandler())
logger.setLevel(DEBUG)
Dies wird mit ".debug", ".info" usw. an "logger" ausgegeben.
logger.info("Enter special block")
Da NullHandler registriert ist, wird dieses Protokoll verworfen, wenn der Client es nicht erfasst.
Client side
Der Name des Loggers auf der Bibliotheksseite wird mit __name__
registriert. Beispielsweise wird es mit Namen wie "mod.mod" und "modmod2" registriert. Da es mit "." Überlagert ist, können Sie die Protokolle beider Submodule empfangen, indem Sie mit "mod" darauf verweisen. Wenn kein Name angegeben wird, werden alle Protokolle gesammelt.
sys.stderr
)import logging
logger = logging.getLogger()
logger.addHandler(logging.StreamHandler())
logger.setLevel(logging.DEBUG)
--Geben Sie das Protokoll über INFO des Mods mod
in eine Datei ( mod.log
) ein.
import logging
logger = logging.getLogger("mod")
logger.addHandler(logging.FileHandler("mod.log", mode="w"))
logger.setLevel(logging.INFO)
Natürlich ist es möglich, eine Funktion auf der Bibliotheksseite vorzubereiten, die es dem Client erleichtert, diese Codes auszuführen.
In Anbetracht der nachfolgenden Analyse möchte ich ein strukturiertes Protokoll. Tatsächlich können Sie ein Wörterbuchobjekt wie "logger.info" angeben:
logger.info({
"key": value,
"homhom": 0,
})
Wenn Sie es nicht besonders festlegen, wird das Ergebnis des "Druckens" normalerweise ausgegeben, sodass es genauso aussieht wie JSON, aber Es ist kein formeller JSON, daher ist es schwierig, ihn zu analysieren. Hier kommt python jsonlogger ins Spiel. Dies wird bei der Ausgabe auf der Clientseite als JSON neu formatiert.
So geben Sie in die obige Datei aus:
import logging
from pythonjsonlogger import jsonlogger
h = logging.FileHandler("mod.log", mode="w")
h.setFormatter(jsonlogger.JsonFormatter())
logging.getLogger("mod").addHandler(h)
Dadurch wird für jede Zeile ein gültiges JSON-Protokoll ausgegeben. Also loggen Sie sich ein
with open("mod.log") as f:
df = pd.DataFrame([json.loads(l) for l in f])
Es kann leicht in Pandas wie gegossen werden.
Recommended Posts