2012-04-08 3 views
1

파이썬의 로깅 모듈을 사용하여 내 응용 프로그램에 대해 사용자에게 표시 할 정보의 여러 레이어가있는 예외 처리 메커니즘을 갖기 위해 노력하고 있습니다.python - 예외 추적의 선택적 처리

로깅 모듈에는 DEBUG 정보를 유지하는 파일 핸들러와 INFO 정보를 유지하는 스트림 처리기라는 두 개의 핸들러가 있습니다. 기본적으로 로깅 수준은 INFO로 설정됩니다. 내가 무엇을 달성하기 위해 노력하고있어 설치 예외가 발생하면 사용자가 어떤 흔적도없이 간단한 오류 메시지가 표시됩니다. 로깅 수준이 DEBUG로 설정된 경우 사용자는 여전히 이라는 단순한 메시지를 받아야하지만 이번에는 예외 추적이 파일 처리기를 통해 로그 파일에 기록됩니다.

이것을 달성 할 수 있습니까?

logger.exception(e)을 사용해 보았지만 콘솔에 항상 추적 표시가 인쇄됩니다.

답변

2

traceback 모듈이 도움이 될 수 있습니다.

setup_log_and_other_basic_services() 
try: 
    run_your_app() 
except Exception as e: 
    if is_debug(): 
     traceback.print_stack() 
    else: 
     traceback.print_stack(get_log_file()) 
    print e 

은 try/catch 블록 외부 코드가 충돌 할 수 없습니다해야합니다 응용 프로그램의 최상위 레벨에서, 당신은 캐치 모든 문을 넣어해야합니다.

+0

이 솔루션을 사용하면 예외가 시작되는 블록이 아닌 except 블록에서 시작되는 추적 표시가 인쇄됩니다. 충돌의 원인을 현지화하는 데 실제로 도움이되지 않습니다. –

0

사용자 정의 예외 처리 함수를 작성하고 catch를 작성할 때마다 사용하십시오.

이 기능에서는 어떤 모드가 켜져 있는지 (INFO 또는 DEBUG) 확인한 다음 예외에 대한 정보를 추출하여 필요할 때 수동으로 로거에 공급해야합니다.