Lorsque vous souhaitez afficher les informations d'emplacement avec les informations d'emplacement lorsque vous sortez le journal à l'aide du journal de journalisation Il y a. Pour le dire concrètement, je veux un retraçage. Discutez de la marche à suivre lors de l'inclusion de ce suivi dans le journal.
Bien sûr, il existe une histoire que vous pouvez ajouter vous-même au journal. Comme ci-dessous.
import logging
import traceback
logger = logging.getLogger("sample")
def foo():
bar()
def bar():
logger.info("bar")
logger.info("tb: %s", "".join(traceback.format_stack()))
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
foo()
Traceback est affiché pour le moment.
INFO:sample:bar
INFO:sample:tb: File "qr_64852sBQ.py", line 18, in <module>
foo()
File "qr_64852sBQ.py", line 8, in foo
bar()
File "qr_64852sBQ.py", line 13, in bar
logger.info("tb: %s", "".join(traceback.format_stack()))
Cependant, il est difficile de prendre la peine de récupérer le retraçage par vous-même. Il est étrange d'exiger des connaissances en python (ʻimport traceback`) juste pour la sortie du journal en premier lieu.
stack_info
En fait, vous n'avez pas à ajouter vous-même le suivi comme ci-dessus, ajoutez simplement stack_info = True lorsque vous vous déconnectez avec logger.
--- 00sample.py 2017-07-13 08:06:10.000000000 +0900
+++ 01sample.py 2017-07-13 08:09:06.000000000 +0900
@@ -1,6 +1,5 @@
# -*- coding:utf-8 -*-
import logging
-import traceback
logger = logging.getLogger("sample")
@@ -9,8 +8,7 @@
def bar():
- logger.info("bar")
- logger.info("tb: %s", "".join(traceback.format_stack()))
+ logger.info("bar", stack_info=True)
Lorsque je l'exécute, le suivi est affiché après Pile (dernier appel le plus récent).
INFO:sample:bar
Stack (most recent call last):
File "qr_64852GWc.py", line 16, in <module>
foo()
File "qr_64852GWc.py", line 7, in foo
bar()
File "qr_64852GWc.py", line 11, in bar
logger.info("bar", stack_info=True)
exc_info
Vous souhaiterez peut-être afficher le traçage de la position d'occurrence d'exception au lieu de la position de sortie du journal. Par exemple, le même format que lors de l'utilisation de logger.exceptipn ().
Vous pouvez le faire en passant ʻexc_info au lieu de stack_info`.
import logging
logger = logging.getLogger("sample")
def foo():
bar()
def bar():
logger.info("bar")
1 / 0
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
try:
foo()
except:
logger.info("hmm", exc_info=True)
Le traçage de la position où l'erreur de division zéro se produit est extrait de l'objet d'exception et automatiquement écrit ensemble.
INFO:sample:bar
INFO:sample:hmm
Traceback (most recent call last):
File "qr_64852t0u.py", line 18, in <module>
foo()
File "qr_64852t0u.py", line 7, in foo
bar()
File "qr_64852t0u.py", line 12, in bar
1 / 0
ZeroDivisionError: division by zero