• Официальный сайт SDK
  • Сайт с примерами кода

Журналирование событий приложения

Марсия Никколаи, разработчик Google
Апрель 2008

Введение

Для ведения журнала событий, которые могут происходить в вашем приложении, Google App Engine использует стандартный модуль logging. События (логи), которые были созданы приложением, можно просмотреть через Административную консоль. Все запросы пользователя, переданные приложению, также включаются в данные, к которым можно получить доступ через эту консоль.

Чтобы подробнее познакомиться с тем, как работает этот модуль, обратитесь к его документации на сайте .

Ведение журнала событий различных типов

Модуль logging языка Python позволяет разработчику использовать до 5 различных уровней предупреждений: Debug, Info, Warning, Error и Critical (отладка, информация, предупреждение, ошибка и критическая ошибка).

Ниже приведен пример, который использует для своей работы эти различные уровни в простом приложении 'Гостевая книга':

import logging
import os
import datetime
import wsgiref.handlersfrom google.appengine.api import users
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.ext.webapp import templateclass Post(db.Model)
  author = db.UserProperty()
  content = db.StringProperty()
  date = db.DateTimeProperty()
class MainPage(webapp.RequestHandler):  def get(self):
    # Retrieve existing posts from the datastore when getting the Main Page
    try:
      post_query = db.GqlQuery('SELECT * FROM Post ORDER BY date DESC')
      posts = [post for post in post_query]
    except:
      logging.error('Произошла ошибка при загрузке данных')
         
    template_values = {
      'posts': posts,
    }
    path = os.path.join(os.path.dirname(__file__), 'index.html')
    self.response.out.write(template.render(path, template_values))
class Guestbook(webapp.RequestHandler):
  # The user has posted a comment to the guest book
  def post(self):
    logging.debug('Получен запрос входа пользователя в гостевую книгу')    post = Post()    if users.get_current_user():
      logging.info('Авторизован пользователь %s' % users.get_current_user().nickname())
      post.author = users.get_current_user()
    else:
      logging.info('Работает анонимный пользователь')    post.content = self.request.get('content')
    post.date = datetime.datetime.now()    try:
      post.put()
    except:
      logging.error('При сохранении комментария %s произошла ошибка' % self.request.get('content'))    logging.debug('Выход из гостевой книги')
    self.redirect('/')
def main():
  # Установка уровня ведения журнала в основной функции
  # Смотрите раздел Запросы и кэширование для дополнительной
  # информации о том, как App Engine обрабатывает код, определенный в основной функции
  logging.getLogger().setLevel(logging.DEBUG)
  application = webapp.WSGIApplication([('/', MainPage),
                                        ('/sign', Guestbook)],
                                       debug=True)
  webapp.util.run_wsgi_app(application)if __name__ = '__main__':
  main()

В приведенном выше примере метод debug() вызывается для сохранения информации об обрабатываемых приложением запросов. Метод info() сохраняет информацию о пользователях приложения, а метод error() позволяет нам узнать, когда в приложении происходят ошибки.

Позднее мы будем использовать эту информацию для фильтрации данных по типу сообщений, которые нас интересуют. Это позволит нам проще работать с кодом приложения, улучшать его пользовательское восприятие и добавлять дополнительные возможности.

Просмотр информации журнала в реальном времени

Хотя журналы всегда доступны для ознакомления через Административную консоль, иногда бывает полезным получать информацию о событиях напрямую из приложения в реальном времени.

Для того, чтобы увидеть эту информацию в вашем приложении, добавьте к концу его URL строку '?debug'. К примеру, если приложение доступно по адресу http://helloworld.appspot.com/ , то можете просмотреть консоль в реальном времени набрав http://helloworld.appspot.com/?debug. Отладочная консоль отобразится справа снизу от окна вашего приложения, как показано на этом примере:

Консоль позволяет просматривать журнал событий, которые генерирует ваш сайт. Верхние ссылки в окне консоли переключают журналы между уровнями debug, info, warning, error и critical.

При локальной работе с приложением, логи отображаются в реальном времени в окне вывода сервера разработки, который включен в состав App Engine.

Просмотр событий через Административную консоль

Для того, чтобы просмотреть сообщения, которые были получены от вашего приложения, перейдите к Административной консоли по адресу http://appengine.google.com/admin. В левой навигационной панели выберите раздел 'Logs':

Сначала вы увидите десять самых последних событий. Вы можете щелкнуть по каждому из них для получения дополнительной информации, включающей более подробное описание запроса, который обрабатывался в момент создания события и соответствующий ему стэк вызова функций.

Фильтрация событий по важности

На странице просмотра событий Административной консоли, вы можете выбрать просмотр только определенных из них, которые имеют заданный уровень важности или выше. События уровня Debug имеют наименьший приоритет, уровня Critical - наивысший.

К примеру, если вы укажите минимальный уровень важности 'Warning', будут отображены все сообщения с уровнями warning, error и critical.

Поиск прошедших событий в журналах

Если вам понадобится решить проблему и просмотреть сообщения, которые произошли какое-то время назад, то можете задать период просмотра логов:

После указания даты и времени и нажатия на кнопку 'View', консоль обновит информацию и выведет первые 10 событий, которые произошли в то время или ранее. Нажатие на ссылку 'Next 10' приведет к следующей странице вывода результатов в убывающем порядке от времени заданного ранее.