16: ログ出力によるアプリケーション情報の収集(16: Collecting Application Info With Logging)¶
Pythonの標準のログ出力を使用して、Webアプリケーションからデバッグとエラーの出力を取得します。
背景(Background)¶
Webアプリケーション内で何が起こっているのかを知ることは重要です。開発時には出力を収集する必要があります。本番環境では他の人がサイトを使用しているときに問題を検出する必要があります。ログ出力が必要です。
幸いにもPyramidはPythonの通常のロギングを使用しています。プロジェクトの development.ini
はいくつかの妥当なデフォルト値にロギングを設定する箇所を持っています。例えば新しいリクエストが来たときに、Pyramidから送信されたメッセージが表示されます。
目的(Objectives)¶
- ロギングに使用される構成設定を詳しく見ます。
- ビューのコードにロギングステートメントを追加します。
手順(手順)¶
最初に "
view_classes
での結果をコピーします:$ cd ..; cp -r view_classes logging; cd logging $ $VENV/bin/pip install -e .
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'}
最後に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
テストが合格していることを確認します:
$ $VENV/bin/py.test tutorial/tests.py -q .... 4 passed in 0.41 seconds
Pyramidアプリケーションを以下のように実行します:
$ $VENV/bin/pserve development.ini --reload
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つに表示されます
参考
(機械翻訳) ロギング を参照してください。