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() | プログラム
ウルティマオンライン 出会い、そして別れ
サムライファクトリーの平成コンビがお送りするWebサービスダイナシ
画像にコメントをつけて、ぜひ楽しんでください。
前回のつづき

馬に乗った装備がイカツイ人(Aさん)は、いきなり俺のゾンビメイルを譲るように交渉してきました。
ネットゲーム初心者に交渉なんてハードルが高すぎます。
それにPKがないフィールドとはいえ、相手は何してくるかわからない状況なので予備のゾンビメイルを贈呈しました。

賄賂が功を制したのか相手が饒舌に語り始めました。なんでも、この世界では名のある方らしく引退とやらをするから思い出の地を回っている。そこでふとゾンビメイルがほしくなったと。
もはや言ってる意味が不明すぎてテレビを見ながら聞いていました。

しかも、ゾンビメイルをネタ装備呼ばわりしてきました。まったく失礼な人です。
あまりにも悲惨な装備に見えたのでしょう。装備一式を買ってきてくれました。しかも馬のおまけ付きです。
こんないい人見た事がありません。

その後Aさんの家に招待されました。なんでもこのゲームで家はすごい価値があるようです。馬は簡単に譲れるのに家は貴重と市場価格がよく解らない状態です。
たぶんAさんは自慢をすることが嫌いな性格なんだと思います。ただ、あまりにも食いつきの悪い自分に嫌気をさしたのか色々と語っていました。

ギルドにも誘われて、ホームページも教えて頂きました。当時ではけっこうセンセーショナルだったのかもしれません。
自分は「うぁ、この人マジや」と言葉に発しながら、キーボードは「すごいですねー」と打ち込む大人の対応。
執拗に勧誘されましたが後で連絡すると華麗にスルーしました。

まったくネットゲームとは意味の分からない世界です。一文の特にもならないのに装備一式をプレゼントし、いろいろと教えてくれます。しかもレベル上げまでお手伝いすると進言されました。

断っても断っても遠慮しないでと言われ仕方なくお願いする事に。いったいこの人に何の特があったのか。。。
レベル上げの方法はゴーレムみたいなモンスターを倒す事に。
装備がパワーアップしたけど触れたら瞬殺される攻撃力です。Aさんが攻撃を受けつつ少し離れた間合いからナイフでつっつきます。すこし間合いをあけることがミソらしくこちらにターゲットされないようです。

それから1時間ほど永遠にナイフをつっつくだけの作業が開始です。どんどんステータスは上がっていきますがまったくおもしろくありません。なんとか会話を試みるが共通の話題なんてありません。これほど苦痛だったのは一人も客の来ない喫茶店でアルバイトした時以来です。

次の日会社だったのでそろそろ引き上げようと話してみるも、もう少しがんばりましょうと拒否。
こいつ、、、何が目的なんだ。。。
こうなったら強硬手段。わざと間合いをつめてこちらが攻撃を受けるように操作ミスを装う作戦を決行しました。
案の定即死です。そして案の定蘇生されました。
魔法ではなく包帯で蘇生されました。その事についてさらに熱弁されました。
もう勘弁してください。。。最後の力を振り絞ってログアウト。
この瞬間あの苦痛な喫茶店のアルバイトでタイムカードを押したとき以来の快楽でした。

ネットゲーム。それは人と人がコミュニケーションをかわすバーチャル世界。
この世界を体験したことで、ちょっとした冒険心と多大なストレスを手に入れました。


2011/11/05 23:06 | Comments(0) | TrackBack() | 思い出

<<前のページ | HOME | 次のページ>>