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.
sys.stderr
)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.
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.