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