Djangoのロギングに問題があります。ところで、この質問への回答はDjangoの名前空間の仕組みを明確にするのに役立ちます。私は1つのファイルにすべてのメッセージをログに記録したいとDjangoのロギングプロジェクトとアプリのネームスペース
MyProject:
-App1:
....
views.py
-App2:
....
urls.py
settings.py
:ここ
は私のプロジェクトの構造です。ブラウザでfrom django.views.generic import DetailView
import logging
logger = logging.getLogger(__name__)
....
class EvenementDetailView(DetailView):
print __name__
model=Evenement
....
logger.debug('blabla')
:urls.pyで
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'verbose': {
#'format': '%(levelname)-8s %(remote_addr)-15s %(path_info)s %(asctime)s %(name)-20s %(funcName)-15s %(message)s'
'format': '%(levelname)-8s %(asctime)s %(name)-20s %(funcName)-15s %(message)s'
},
},
'handlers': {
'normal': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'formatter': 'verbose',
'filename': os.path.join('C:/dev/Instantaneus/Instantaneus/html/static', 'log', 'normal.log')
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'verbose',
},
},
'loggers': {
'MyProject': {
'handlers': ['normal','console'],
'level': 'DEBUG',
#'filters': ['request'],
'propagate': True,
},
}
}
:
from MyProject.App1.views import EvenementDetailView,
....
url(r'App1/(?P<pk>\d+)/$', login_required(EvenementDetailView.as_view(model=Evenement)), name='evenement_details'),
とのApp1/views.pyでそれから私はsettings.py次ロガーでセットアップをしましたhttp://localhost/App1/3
と呼ぶと、コンソールに次のようなメッセージが表示されます。
DEBUG 2012-01-18 14:59:04,503 Myproject.evenements.views EvenementDetailView blabla
MyProject.evenements.views
evenements.views
私の質問はなぜprint __name__
のコードが2回実行され、出力が同じでないのが最も重要なのですか?
私は、この場合には根がevenements
任意のアイデアですのでevenement.views
がMyProjectのに伝播することはできませんのでDEBUG
ログは一度だけ表示されていることを想定?
ソリューションではなく、深さの説明ではなく、それが動作して:私のurls.pyで
、私は「アクティブ」はApp1の/ views.py内の関数であるラインurl(r'App1/(?P<pk>\d+)/activate/$', 'app1.views.activate')
を持っていました。私は'MyProject.app1.views.activate'
の'App1.views.activate'
を変更しても問題ありません。私はprint __name__
のコンソールに1行しかありません。私は 'disable_existing_loggers'のために私は1行しかないと思います。本当ですが、私が説明できないことは、このソリューションが私のviews.pyを2回前に1回だけ解析することでした。そのことを確認するために、ファイルの先頭にprint "blabla"
を追加しました。最初のケースでは彼は2回、2回目ではoncesだけを印刷しています。
こんにちはアダム。お返事ありがとうございました。あなたが示唆するように、私はPythonのパスから親のdirectoyを削除しました。彼はもうsys.pathにはいないが、結果は同じだ。長い記事については、後で詳しく見ていくつもりですが、私のレベルでは少し複雑です! – Youpsla
類似の問題:http://stackoverflow.com/a/8917273/16361 – AdamKG