使用Google App Engine,Python 2.7,threadsafe:true
,webapp2。如何使用Python日誌記錄收集App Engine請求的日誌?
我想在我的API響應中包含所有logging.XXX()
消息,所以我需要一種有效的方式來收集請求範圍內發生的所有日誌消息。我也想在threadsafe:true
中操作,所以我需要小心才能得到正確的日誌消息。
目前,我的策略是在我的webapp2調度方法的開始處添加logging.Handler
,然後在最後刪除它。爲了僅爲我的線程收集日誌,我使用當前線程的名稱實例化logging.Handler
;該處理程序將簡單地丟棄來自不同線程的日誌記錄。我正在使用線程名稱而不是線程ID,因爲使用ID時dev_appserver
上出現了意外的結果。
問題:
它是有效的,不斷被添加/以這種方式消除
logging.Handler
對象?也就是說,每個請求都會添加,然後刪除一個Handler
。這是「便宜」嗎?這是獲取我的請求的日誌消息的最佳方式嗎?我的主要假設是每個請求都有自己的線程,並且該線程名稱實際上會選擇正確的項目。
我是否從根本上誤解了Python日誌?也許我應該只有一個額外的處理程序在模塊級靜態添加一次,並且我的調度應該做一些更輕的事情。
任何建議表示讚賞。我並沒有很好地理解Python(特別是App Engine Python)在日誌方面的做法。顯然,這是非常可能的,因爲App Engine日誌查看器的功能完全相同:它顯示該請求的所有日誌消息。事實上,如果我能以某種方式搭載,那會更好。儘管它絕對需要超便宜 - 即RPC調用不會削減它。
我可以添加一些代碼,如果這將有所幫助。