如何使用Python日志记录收集App Engine请求的日志?

时间:2012-06-25 16:49:30

标签: python google-app-engine logging python-2.7 webapp2

使用Google App Engine,Python 2.7,threadsafe:true,webapp2。

我想在API响应中包含所有logging.XXX()消息,因此我需要一种有效的方法来收集请求范围内发生的所有日志消息。我也希望在threadsafe:true中操作,所以我需要小心,只能得到正确的日志消息。

目前,我的策略是在我的webapp2调度方法的开头添加logging.Handler,然后在最后删除它。要仅为我的线程收集日志,我使用当前线程的名称实例化logging.Handler;处理程序将简单地抛出来自不同线程的日志记录。我正在使用线程名称而不是线程ID,因为我在使用ID时在dev_appserver上收到了一些意外结果。

问题:

  1. 以这种方式不断添加/删除logging.Handler对象是否有效?即,每个请求都会添加Handler,然后删除{{1}}。这“便宜”吗?

  2. 这是仅获取我的请求的日志消息的最佳方式吗?我的主要假设是每个请求都有自己的线程,该线程名称实际上会选择正确的项目。

  3. 我是否从根本上误解了Python日志记录?也许我应该只在静态“模块级”添加一个额外的Handler,并且我的调度应该做得更轻。

  4. 任何建议表示赞赏。我对Python(特别是App Engine Python)在日志记录方面的作用并不了解。显然,这是非常可能的,因为App Engine日志查看器完全相同:它显示该请求的所有日志消息。事实上,如果我能以某种方式捎带,那就更好了。它绝对需要超级廉价 - 也就是说,RPC调用不会削减它。

    如果有帮助,我可以添加一些代码。

1 个答案:

答案 0 :(得分:1)

我在这里找到了很多好处:

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