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를 사용하고 있습니다.
질문 :
는 끊임없이 이런 식으로
logging.Handler
객체를 추가/제거 할 효율적인가요? 즉, 모든 요청은Handler
을 추가 한 다음 제거합니다. 이것은 "싸다"인가?내 요청에 대한 로깅 메시지 만 얻는 가장 좋은 방법입니까? 내 큰 가정은 각 요청이 자체 스레드를 얻고 해당 스레드 이름이 실제로 올바른 항목을 선택한다는 것입니다.
필자는 근본적으로 파이썬 로깅을 오해하고 있습니까? 아마도 "모듈 수준"에서 한 번만 추가 된 Handler를 정적으로 추가해야하고, 디스패치는 더 가벼운 작업을 수행해야합니다.
모든 의견을 환영합니다. 필자는 Python (특히 App Engine Python)이 로깅과 관련하여 어떤 작업을 수행하는지 잘 이해하지 못했습니다. 분명히 App Engine Log Viewer는 똑같은 기능을 수행하기 때문에 가능합니다. 요청에 대한 모든 로그 메시지가 표시됩니다. 사실, 어떻게 든 그걸 피기 백 할 수 있다면 더 좋을 것입니다. 그것은 절대적으로 매우 싸야 만합니다. 즉, RPC 호출이 그것을 절단하지 않을 것입니다.
도움이 될만한 코드가 있으면 추가 할 수 있습니다.
from google.appengine.api import logservice
entries = logservice.logs_buffer().parse_logs()
: