在GAE中使用记录系统

标签:Google App Engine, Python

在GAE中可以使用Python的标准模块logging,而且记录是可以直接在GAE的后台看到的,非常方便。
这里有篇讲述如何在GAE中使用记录系统的文章

先简单介绍下logging。
logging中有6个级别的事件记录:CRITICAL、ERROR、WARNING、INFO、DEBUG和NOTSET。
其中前5个分别用critical、error、warning、info和debug函数来记录。

因为使用非常简单,我就直接给演示代码了。
这是一段记录缓存使用情况的代码片段:
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api import memcache
import logging

counter = -10000

def getImageCounter():
  global counter
  if counter <= 0:
    logging.info('Get ImageCounter from memcache.')
    counter = memcache.get('ImageCounter')
    if counter is None:
      logging.warning('Get ImageCounter from DB.')
      counter = Image.all().count()
      if counter:
        memcache.add('ImageCounter', counter)
  return counter

class UploadImage(webapp.RequestHandler):
  def post(self):
    image = Image()
    image.content = self.request.get("img")
    try:
      image.put()
      global counter
      counter += 1
      memcache.incr('ImageCounter')
    except:
      logging.error('Store error.')
可以看到,我将counter初始化为-10000,它是应该不会出现的值。
每次更新Handler Script缓存时它就会被设为-10000,于是在getImageCounter函数中就会出现counter <= 0的情况,此时就会记录一条info信息,并尝试从memcache中获取。
如果memcache中也获取不到,就记录一天warning信息,并尝试从数据库中获取。

而在更新值时,就得同步Handler Script缓存、memcache和数据库了。

至于将counter初始化为-10000,是因为UploadImage.get中可能将其增加,所以就设大点,只要并发少于10000就没关系。
当然你也可以直接用memcache来初始化,这样甚至不必再UploadImage.get中判断memcache;不过这样可能会导致多使用几次memcache API。(估计一天也多不了几十次。)

0条评论 你不来一发么↓

    想说点什么呢?