Djangoとloggingとprofile
サムライファクトリーの平成コンビがお送りするWebサービスダイナシ
画像にコメントをつけて、ぜひ楽しんでください。
開発中に変数の中身を確認するのにDEBUGレベルでログに出力し、本番環境では出力したくない場合の設定を試してみました。

■ログ出力
プロジェクトを作成するとsettings.pyにログの設定が記述されています。
LOGGIN変数に設定を追加することで標準出力にログを出力することが出来るようになります。

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler'
},
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler'
}
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
'app': {
'handlers': ['console'],
'level': 'INFO',
'propagate': True,
},
}
}


ログを出力したいプログラムに出力用のコードを記述します。

import logging

logger = logging.getLogger('app')

def detail(request, poll_id):
p = get_object_or_404(Poll, pk=poll_id)
logger.debug(p);
return render_to_response('polls/detail.html', {'poll': p},
context_instance=RequestContext(request))


ログファイルに変数pの内容が出力されます。

■プロファイル
環境毎にログの出力レベルを変更するのにdjango-configプラグインを利用しました。
pipからインストールが出来ます。

sudo pip install django-config


django-configを導入するとsettings.py内でconfig/base.pyが実行されます。
環境変数CONFIG_IDENTIFIERに設定された値のファイルが実行され上書きされます。

例)環境変数 CONFIG_IDENTIFIER=test
settings.py -> config/base.py -> config/test.py


mkdir config
cp settings.py config/base.py


settings.pyの内容を書き換えます

"""
Django-config settings loader.
"""

import os

CONFIG_IDENTIFIER = os.getenv("CONFIG_IDENTIFIER")

# Import defaults
from config.base import *

# Import overrides
overrides = __import__(
"config." + CONFIG_IDENTIFIER,
globals(),
locals(),
["config"]
)

# Apply imported overrides
for attribute in dir(overrides):
# We only want to import settings (which have to be variables in ALLCAPS)
if attribute.isupper():
# Update our scope with the imported variables. We use globals() instead of locals()
# Because locals() is readonly and it returns a copy of itself upon assignment.
globals()[attribute] = getattr(overrides, attribute)


設定を上書きしたい内容をconfig/test.pyに記述します。

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler'
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler'
}
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
'app': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': True,
},
}
}


uwsgiの設定ファイルに環境変数CONFIG_IDENTIFIERを追加します。

uwsgi:
env: DJANGO_SETTINGS_MODULE=settings
env: CONFIG_IDENTIFIER=test
省略・・・


2011/11/06 14:28 | Comments(0) | TrackBack(0) | プログラム

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<nginxとpythonとpyramid スタートアップ | HOME | ウルティマオンライン 出会い、そして別れ>>