2013-08-14 5 views
4

내 TB 앱에서 모든 예외를 로그 파일에 기록하려고합니다. 그래서 평소와 같이 사용자 지정 sys.excepthook을 사용하려고했습니다. 그러나 모든 예외는 여전히 제기되고 아무것도 기록되지 않습니다. 내가 색인 방법에 ValueError를 인상하면TurboGears 2.2.2의 RootController에서 사용자 정의 sys.excepthook을 사용하는 방법

class RootController(BaseController): 
    secc = SecureController() 
    error = ErrorController() 

    def __init__(self): 
     self.installExceptHook() 
     super(RootController, self).__init__() 

    def installExceptHook(self): 
     def exceptHook(type, value, tb): 
      logger = logging.getLogger('app') 
      logger.critical(''.join(traceback.format_exception(type, value, tb))) 
     sys.excepthook = exceptHook 

: 여기 내 코드입니다

@expose('app.templates.index') 
def index(self, **kwargs): 
    raise ValueError 
    return dict(page = 'index') 

난 여전히 내 브라우저에서 WebError 역 추적 페이지를 얻고 아무것도 기록되지 않습니다.

내가 뭘 잘못하고 있는지 알아? 어떤 생각? 워드 프로세서 (http://docs.python.org/2/library/sys.html#sys.excepthook)에서

답변

2

은 : 예외가 발생하고 Catch되지 않는 경우

는 통역이 그냥 프로그램이 종료되기 전에 발생 파이썬 프로그램에서 sys.excepthook을 [...] 호출합니다.

이제 WebError이 예외를 catch하고 (응용 프로그램은 예외에서조차 종료하지) 처리하기 때문에, 예외가 sys.excepthook가 호출되는 지점에 도달하지 않습니다.

신속하고 더러운 솔루션

, 당신은 WebError 미들웨어 (https://github.com/TurboGears/tg2/blob/tg2.2.2/tg/configuration/app_config.py#L1036)이 물론 당신이 당신의 웹 서버에서 오류 응답 코드를 처리하는 것을 의미하는 것를 사용하지 않도록 구성 full_stack = False 설정을 시도 할 수 있습니다.

예외를 로그하고 WebError 디버깅/이메일 기능을 계속 사용하려면 사용자 정의 미들웨어를 설정하고 응용 프로그램에 랩핑하고 예외를 기록한 다음 전달하십시오.

+0

감사합니다. 나는 TurboGears 미들웨어가있을 것 같았습니다. –

+0

@ nu.frix 나는 항상 대답을 찾고있을 때 TG 소스 코드를 파헤 치면 도움이된다! 가끔씩 그들은 매우 고무적입니다 : D – moschlar

+0

여러 번 시도했지만, 나는 항상 성공적이지 못했습니다 :) 5 번째 파일로 '리다이렉트'되었을 때 나는 포기했습니다. D –