전체 스택 추적을 얻는 방법을 보여주기 위해 상당히 복잡한 스택 추적을 만들어 봅시다.
def raise_error():
raise RuntimeError('something bad happened!')
def do_something_that_might_error():
raise_error()
전체 스택 추적 로깅
모범 사례는 모듈에 로거를 설정하는 것입니다. 모듈의 이름을 알고 레벨을 변경할 수 있습니다 (핸들러와 같은 다른 속성 중에서)
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
이 로거를 사용하여 오류를 얻을 수 있습니다.
try:
do_something_that_might_error()
except Exception as error:
logger.exception(error)
어떤 로그 :
ERROR:__main__:something bad happened!
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
따라서 오류가 발생했을 때와 동일한 결과를 얻습니다.
>>> do_something_that_might_error()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
문자열 만 얻기
실제로 문자열을 원한다면 traceback.format_exc
대신 함수를 사용 하여 문자열 로깅을 보여줍니다.
import traceback
try:
do_something_that_might_error()
except Exception as error:
just_the_string = traceback.format_exc()
logger.debug(just_the_string)
어떤 로그 :
DEBUG:__main__:Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
log_error(err)
함수를 작성 중 입니다.