2012-06-25 93 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,因爲使用ID時dev_appserver上出現了意外的結果。

問題:

  1. 它是有效的,不斷被添加/以這種方式消除logging.Handler對象?也就是說,每個請求都會添加,然後刪除一個Handler。這是「便宜」嗎?

  2. 這是獲取我的請求的日誌消息的最佳方式嗎?我的主要假設是每個請求都有自己的線程,並且該線程名稱實際上會選擇正確的項目。

  3. 我是否從根本上誤解了Python日誌?也許我應該只有一個額外的處理程序在模塊級靜態添加一次,並且我的調度應該做一些更輕的事情。

任何建議表示讚賞。我並沒有很好地理解Python(特別是App Engine Python)在日誌方面的做法。顯然,這是非常可能的,因爲App Engine日誌查看器的功能完全相同:它顯示該請求的所有日誌消息。事實上,如果我能以某種方式搭載,那會更好。儘管它絕對需要超便宜 - 即RPC調用不會削減它。

我可以添加一些代碼,如果這將有所幫助。

回答

1

我發現很多善良的位置:

from google.appengine.api import logservice 
entries = logservice.logs_buffer().parse_logs() 
相關問題