16: ログ出力によるアプリケーション情報の収集(16: Collecting Application Info With Logging)

Pythonの標準のログ出力を使用して、Webアプリケーションからデバッグとエラーの出力を取得します。

背景(Background)

Webアプリケーション内で何が起こっているのかを知ることは重要です。開発時には出力を収集する必要があります。本番環境では他の人がサイトを使用しているときに問題を検出する必要があります。ログ出力が必要です。

幸いにもPyramidはPythonの通常のロギングを使用しています。プロジェクトの development.ini はいくつかの妥当なデフォルト値にロギングを設定する箇所を持っています。例えば新しいリクエストが来たときに、Pyramidから送信されたメッセージが表示されます。

目的(Objectives)

  • ロギングに使用される構成設定を詳しく見ます。
  • ビューのコードにロギングステートメントを追加します。

手順(手順)

  1. 最初に "view_classes での結果をコピーします:

    $ cd ..; cp -r view_classes logging; cd logging
    $ $VENV/bin/pip install -e .
    
  2. logging/tutorial/views.py を拡張してメッセージをログに記録します:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    import logging
    log = logging.getLogger(__name__)
    
    from pyramid.view import (
        view_config,
        view_defaults
        )
    
    
    @view_defaults(renderer='home.pt')
    class TutorialViews:
        def __init__(self, request):
            self.request = request
    
        @view_config(route_name='home')
        def home(self):
            log.debug('In home view')
            return {'name': 'Home View'}
    
        @view_config(route_name='hello')
        def hello(self):
            log.debug('In hello view')
            return {'name': 'Hello View'}
    
  3. 最後にPyramidアプリケーションのログを有効にするための設定ファイル development.ini を編集しましょう。

    [app:main]
    use = egg:tutorial
    pyramid.reload_templates = true
    pyramid.includes =
        pyramid_debugtoolbar
    
    [server:main]
    use = egg:waitress#main
    listen = localhost:6543
    
    # Begin logging configuration
    
    [loggers]
    keys = root, tutorial
    
    [logger_tutorial]
    level = DEBUG
    handlers =
    qualname = tutorial
    
    [handlers]
    keys = console
    
    [formatters]
    keys = generic
    
    [logger_root]
    level = INFO
    handlers = console
    
    [handler_console]
    class = StreamHandler
    args = (sys.stderr,)
    level = NOTSET
    formatter = generic
    
    [formatter_generic]
    format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s
    
    # End logging configuration
    
  4. テストが合格していることを確認します:

    $ $VENV/bin/py.test tutorial/tests.py -q
    ....
    4 passed in 0.41 seconds
    
  5. Pyramidアプリケーションを以下のように実行します:

    $ $VENV/bin/pserve development.ini --reload
    
  6. http://localhost:6543/http://localhost:6543/howdy をブラウザーで開きます。コンソールとデバッグツールバーの両方でログに記録されたメッセージに注目してください。

分析(Analysis)

設定ファイル development.ini では、tutorial のPythonパッケージはロガーとして設定されてDEBUG以上のレベルでメッセージを記録するように設定されています。 http://localhost:6543 にアクセスすると、コンソールに以下のように表示されます:

2013-08-09 10:42:42,968 DEBUG [tutorial.views][MainThread] In home view

また pyramid_debugtoolbar を使用するようにPyramidアプリケーションを設定した場合はロギングステートメントはメニューの1つに表示されます

参考

(機械翻訳) ロギング を参照してください。