Wenn Sie die Standortinformationen zusammen mit den Standortinformationen ausgeben möchten, wenn Sie das Protokoll mit dem Logger von logging ausgeben. Es gibt. Um es greifbar auszudrücken, ich möchte eine Rückverfolgung. Sprechen Sie darüber, was zu tun ist, wenn Sie diesen Traceback in das Protokoll aufnehmen.
Natürlich gibt es eine Geschichte, in der Sie dem Protokoll selbst einen Traceback hinzufügen können. Wie nachstehend.
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 wird vorerst angezeigt.
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()))
Es ist jedoch mühsam, sich die Mühe zu machen, den Traceback selbst abzurufen. Es ist seltsam, Python-Kenntnisse (import traceback
) nur für die Protokollausgabe zu benötigen.
stack_info
Tatsächlich müssen Sie das Traceback nicht wie oben beschrieben selbst hinzufügen. Fügen Sie einfach "stack_info = True" hinzu, wenn Sie sich mit logger abmelden.
--- 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)
Wenn ich es ausführe, wird Traceback nach "Stack (letzter Aufruf zuletzt)" angezeigt.
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
Möglicherweise möchten Sie den Traceback der Position für das Auftreten von Ausnahmen anstelle der Position für die Protokollausgabe anzeigen. Zum Beispiel das gleiche Format wie bei Verwendung von "logger.exceptipn ()". Sie können dies tun, indem Sie "exc_info" anstelle von "stack_info" übergeben.
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)
Der Traceback der Position, an der der Nullteilungsfehler auftritt, wird aus dem Ausnahmeobjekt extrahiert und automatisch zusammengeschrieben.
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
Recommended Posts