2017-10-13 1 views
0

나는 다음과 같은 테스트 코드가 있습니다 (윈도우 7에서 파이썬 2.7.10에서) 실행되면파이썬 - 로그 출력 억제 예외 상황

import logging 

def main(): 
    l = ['a', 'b'] 
    l.index('c') 

logging.basicConfig(level=logging.DEBUG, filename='myapp.log', format='') 

try: 
    main() 
except: 
    logging.exception('') 

,이 로그 파일에 다음 역 추적 정보를 출력합니다

  1. 톤 예외 상황을 억제 만 얻을 수있는 방법이 있나요 :

    Traceback (most recent call last): 
        File "C:/Documents and Settings/maurobio/test/log.py", line 12, in <module> 
        main() 
        File "C:/Documents and Settings/maurobio/test/log.py", line 6, in main 
        l.index('c') 
    ValueError: 'c' is not in list 
    

    가 나는 두 가지 질문이 있습니다 그는 마지막 추적?

  2. 디렉토리의 전체 이름 대신 파일 이름의 기본 이름 (확장자) 만 얻을 수 있습니까?

은 요약하면 : 당신이 제공 할 수있는 모든 지원을 사전에

Traceback (most recent call last): 
    File "log.py", line 6, in main 
    l.index('c') 
ValueError: 'c' is not in list 

감사 : 나는 로그 파일에 출력 같은 뭔가 싶습니다.

+0

왜 ([2] sys.exc_info())'기록 될 수있는 형식의 메시지를 생성하는'sys.exc_info()'와'traceback.format_tb를 사용하여 예외 정보를 수집하려고하지 않습니다. – Payman

+0

제안을 주셔서 감사합니다. – maurobio

답변

0

여기 제가 마침내 얻은 해결책입니다. 희망은 다른 사람들에게도 도움이 될 수 있습니다.

import os 
import sys 
import logging 
import traceback 

def main(): 
    l = ['a', 'b'] 
    l.index('c') 

logging.basicConfig(level=logging.DEBUG, filename='myapp.log', filemode='w', format='') 

try: 
    main() 
except Exception, e: 
    eclass, e, etrace = sys.exc_info() 
    efile, eline, efunc, esource = traceback.extract_tb(etrace)[-1] 
    logging.error('Traceback (most recent call last):') 
    logging.error(' File "%s", line %d in %s\n%s: %s' % (os.path.basename(efile), eline, efunc, eclass.__name__, str(e)))