2012-06-25 4 views
2

Google App Engine, Python 2.7, threadsafe:true, webapp2 사용.Python 로깅을 사용하여 App Engine 요청에 대한 로그를 수집하는 방법은 무엇입니까?

내 API 응답에 모두 logging.XXX() 개의 메시지를 포함하고 싶습니다. 따라서 요청 범위에서 발생하는 모든 로그 메시지를 수집하는 효율적인 방법이 필요합니다. 또한 threadsafe:true에서 작업하기를 원하므로 올바른 로그 메시지 만 얻도록주의해야합니다.

현재 나의 전략은 webapp2 디스패치 메소드의 시작 부분에 logging.Handler을 추가 한 다음 끝에 제거하는 것입니다. 내 스레드에 대해서만 로그를 수집하려면 logging.Handler을 현재 스레드의 이름으로 인스턴스화하십시오. 핸들러는 단순히 다른 스레드의 로그 레코드를 버립니다. ID를 사용할 때 dev_appserver에서 예기치 않은 결과가 발생했기 때문에 스레드 이름과 스레드 ID를 사용하고 있습니다.

질문 :

  1. 는 끊임없이 이런 식으로 logging.Handler 객체를 추가/제거 할 효율적인가요? 즉, 모든 요청은 Handler을 추가 한 다음 제거합니다. 이것은 "싸다"인가?

  2. 내 요청에 대한 로깅 메시지 만 얻는 가장 좋은 방법입니까? 내 큰 가정은 각 요청이 자체 스레드를 얻고 해당 스레드 이름이 실제로 올바른 항목을 선택한다는 것입니다.

  3. 필자는 근본적으로 파이썬 로깅을 오해하고 있습니까? 아마도 "모듈 수준"에서 한 번만 추가 된 Handler를 정적으로 추가해야하고, 디스패치는 더 가벼운 작업을 수행해야합니다.

모든 의견을 환영합니다. 필자는 Python (특히 App Engine Python)이 로깅과 관련하여 어떤 작업을 수행하는지 잘 이해하지 못했습니다. 분명히 App Engine Log Viewer는 똑같은 기능을 수행하기 때문에 가능합니다. 요청에 대한 모든 로그 메시지가 표시됩니다. 사실, 어떻게 든 그걸 피기 백 할 수 있다면 더 좋을 것입니다. 그것은 절대적으로 매우 싸야 만합니다. 즉, RPC 호출이 그것을 절단하지 않을 것입니다.

도움이 될만한 코드가 있으면 추가 할 수 있습니다.

from google.appengine.api import logservice 
entries = logservice.logs_buffer().parse_logs() 
:

답변

1

나는 여기에 선하심을 많이 발견