따라서 호출 스택의 간단한 문자열을 반환하는 메서드가 있습니다.호출 스택을 로깅 형식으로 사용할 수 있습니다.
def call_stack():
if "inspect" not in globals().keys():
import inspect
stack = [frame[3] for frame in inspect.stack() if frame[3] not in [inspect.stack()[0][3],"<module>"]]
s = ""
for method in stack:
if len(s) > 0:
s += "."
s += method
return s
def modify_logger(logger):
logger.args["call_stack"] = call_stack()
이 동작을 만들 수 있습니까? 다음 항목 결과
import logging
logging.basicConfig(level=logging.DEBUG, format="%(call_stack)s -- %(levelname)s: %(message)s")
def bar():
logging.debug("test")
def foo():
bar()
def monkey():
foo()
# modify root logger.
modify_logger(logging.getLogger())
# write to the log.
monkey()
:
import logging
def call_stack():
if "inspect" not in globals().keys():
import inspect
stack = [frame[3] for frame in inspect.stack()
if frame[3] not in [inspect.stack()[0][3],"<module>"]]
s='.'.join(reversed(stack))
return s
def debug(message):
logging.debug('{s} -- DEBUG: {m}'.format(
s=call_stack()[:-len('debug.')],m=message))
logging.basicConfig(level=logging.DEBUG, format="%(message)s")
def bar():
debug("test")
def foo():
bar()
def monkey():
foo()
monkey()
이 후
monkey.foo.bar -- DEBUG: test