# Logging Events in Your Application - Google App Engine - Google Code

English ▼
Skip to page content Skip to main navigation
e.g. "templates" or "datastore"

# Logging Events in Your Application

Marzia Niccolai, Google Developer Programs
April 2008

## Introduction

Google App Engine uses the Python logging module to allow you to log events that take place in your application. The logs that have been generated by your application are viewable under that application in the Administration Console. We also include all requests made to your application in our logging console.

To familiarize yourself with how the Python logging module works, please see the module documentation at Python.org.

## Logging Different Kinds of Events in your Application

The Python logging module allows a developer to log 5 levels of severity: Debug, Info, Warning, Error and Critical.

Below is an example on how one might use some of these levels to effectively log events in a simple Guestbook application:

    import logging
    import os
    import datetime
    import wsgiref.handlers

    from google.appengine.api import users
    from google.appengine.ext import db
    from google.appengine.ext import webapp
    from google.appengine.ext.webapp import template

    class 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('There was an error retrieving posts from the datastore')

          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('Start guestbook signing request')

            post = Post()

            if users.get_current_user():
                logging.info('Signed by user %s', users.get_current_user().nickname())
                post.author = users.get_current_user()
            else:
                logging.info('Signed by anonymous user')

            post.content = self.request.get('content')
            post.date = datetime.datetime.now()

            try:
                post.put()
            except:
                logging.error('There was an error saving comment %s', self.request.get('content'))

            logging.debug('Finish guestbook signing')
            self.redirect('/')

    application = webapp.WSGIApplication([('/', MainPage),
                                          ('/sign', Guestbook)],
                                         debug=True)

    def main():
        # Set the logging level in the main function
        # See the section on Requests and App Caching for information on how
        # App Engine reuses your request handlers when you specify a main function
        logging.getLogger().setLevel(logging.DEBUG)
        webapp.util.run_wsgi_app(application)

    if __name__ = '__main__':
        main()

In the above example the logging method `debug()` is called to give us information about what requests our app handles. The `info()` method is called to give us information about the users of our application, and the `error()` method is called to let us know where our applications is experiencing errors.

Later, we can use this information to filter out only the actions we are interested in. This will help us troubleshoot our code, improve the user experience, or add additional features to our application.

## Access Application Logs in the Administration Console

To see the logs generated by your application, sign in to your Administration Console at https://appengine.google.com/. In the left-hand navigation column, click Logs. You should see a summary of recent log events. To see more details about an event, click the button on that event.

You can choose to view only those logged events that are above a certain severity. Debug events are considered the lowest severity, Critical events are considered the highest. For instance, if you select a minimum severity of 'Warning', all warning, error, and critical log events will be displayed.

To troubleshoot an event that took place at some point in the past, you can also specify a date and time period to jump to in the logs. Expand Options, enter a date and time at Since, and click Search. The logging console updates the view with logs at or before that time period.

Your application can control how much logs data to keep. To configure this, choose Application Settings in the Administration Console's side navigation, then find the Logs Retention section of that page. Choose the number of days of logs that the application should keep.

There is also a control showing the maximum amount of storage space to use for logs. (If your application does not have billing enabled, this control is grayed out and you can't change it.) When estimating how much space you need for logs, you might expect to need 100 bytes per request plus the content of any application logs.