2011-01-29 2 views
22
try: 
    print blah 
except KeyError: 
    traceback.print_exc() 

이렇게 디버깅하는 데 사용되었습니다. 콘솔에 인쇄합니다. 이제는 아파치가 인쇄를 허용하지 않기 때문에 print 대신 모든 것을 기록하고 싶습니다. 그럼,이 전체 추적을 어떻게 기록합니까?장고 로거 (Django 's logger)를 사용하여 어떻게 추적 할 수 있습니까?

import logging 
... 

logger = logging.getLogger("blabla") 
... 

try: 
    print blah # You can use logger.debug("blah") instead of print 
except KeyError: 
    logger.exception("An error occurred") 

이 스택 트레이스를 인쇄하고 아파치와 함께 작동합니다 :

답변

41

당신은 파이썬의 로깅 메커니즘을 사용할 수 있습니다.

+0

이것은 실제로 전체 추적을 기록합니까? – TIMEX

+6

예, 전체 스택 추적. 문서에서 : "Logger.exception()은 Logger.error()와 비슷한 로그 메시지를 생성하지만, Logger.exception()은 스택 추적을 덤프합니다." 이 링크는 설명서에 있습니다. http://docs.python.org/library/logging.html – Lin

+0

로그는 어디에 저장됩니까? logger = logging.getLogger ('bla')를 정의했지만 특정 디렉토리로 저장합니까? 파일 또는 데이터베이스? – TIMEX

7

Django의 트렁크 버전 (또는 릴리스 될 때 1.3)을 실행중인 경우 Python의 표준 로깅 모듈과 통합 된 여러 기본 로깅 구성이 내장되어 있습니다. 이를 위해 import logging을 호출하고 logger = logging.getLogger(__name__)으로 전화 한 다음 logger.exception(msg)으로 전화하면 메시지와 스택 추적이 모두 표시됩니다. Django's logging functionalityPython's logger.exception method에 대한 문서는 참고가 될 것입니다.

파이썬의 로깅 모듈을 사용하지 않으려면 import sys을 사용하고 print를 사용하는 대신 sys.stderr에 쓸 수 있습니다. 커맨드 라인에서 이것은 화면으로 간다. 아파치에서 돌아 가면 에러 로그에 들어간다.